REPLACE ??
10 отговора
342 прегледа
REPLACE ??
Niakoi ima li gram ideia kvo podiavolite mu e nat tva...
MySQL <4.x.x
Table:
CREATE TABLE test (
A varchar(4) NOT NULL default '',
B tinyint(4) NOT NULL default '0',
PRIMARY KEY (A),
UNIQUE KEY id (A)
) TYPE=MyISAM;
da jajem che ima edin zabis A=1 i B=1
pri edin Replace into test values(1,B+1);
prosto B si ostava = 1
ima li niakakyv way za celia shit..
MySQL <4.x.x
Table:
CREATE TABLE test (
A varchar(4) NOT NULL default '',
B tinyint(4) NOT NULL default '0',
PRIMARY KEY (A),
UNIQUE KEY id (A)
) TYPE=MyISAM;
da jajem che ima edin zabis A=1 i B=1
pri edin Replace into test values(1,B+1);
prosto B si ostava = 1
ima li niakakyv way za celia shit..
Re: UPDATE.. ne e tva ideiata :(
Iavno ne sym si explain kakto tribva ideiata .. ideiata e da se izpolzva replace ta ako niama vyprosnia zapis ( nali za tva mu e nujen primary key) da zeme da go insertne t.e vmesto...
select blabla bla from test where bla bla
if result {Update.....} Else{ Insert .....}
celia toia shit da se zameni s replace spored Documentaciata
"REPLACE works exactly like INSERT, except that if an old record in the table has the same value as a new record on a UNIQUE index or PRIMARY KEY, the old record is deleted before the new record is inserted"
i kato se poraztyrish iz general mailing lista na mysql-a horata niakak si go postigat podiavolite...
select blabla bla from test where bla bla
if result {Update.....} Else{ Insert .....}
celia toia shit da se zameni s replace spored Documentaciata
"REPLACE works exactly like INSERT, except that if an old record in the table has the same value as a new record on a UNIQUE index or PRIMARY KEY, the old record is deleted before the new record is inserted"
i kato se poraztyrish iz general mailing lista na mysql-a horata niakak si go postigat podiavolite...
Re: UPDATE.. ne e tva ideiata :(
както си написал от документацията, REPLACE първо изтрива и после insert-ва, та с replace това което искаш нестава ;-( трябва да ползваш варианта, който си описал SELECT , ако има update, ако не insert
п.с.
на таблицата както си я описал UNIQUE KEY-а е ненужен, тъй като PRIMARY KEY включва в себе си уникалност
п.с.
на таблицата както си я описал UNIQUE KEY-а е ненужен, тъй като PRIMARY KEY включва в себе си уникалност
Re: REPLACE = DELETE + INSERT
Вече ти обясниха з акакво става дума.
Само да допълня, че това е много често срещано объркване.
REPLACE не е UPDATE-ако-няма-какво-INSERT
REPLACE просто заменя:
1. DELETE WHERE PrimaryKey=каквото си написал
2. INSERT ...
Добрата новина е, че в момента имаме синтаксис, който може да прави това което искаш.
INSERT INTO t VALUES (5,7,40) ON DUPLICATE KEY UPDATE c=c+100;
Това обаче работи само в 4.1 и нагоре
salle.online.bg/sig
Само да допълня, че това е много често срещано объркване.
REPLACE не е UPDATE-ако-няма-какво-INSERT
REPLACE просто заменя:
1. DELETE WHERE PrimaryKey=каквото си написал
2. INSERT ...
Добрата новина е, че в момента имаме синтаксис, който може да прави това което искаш.
INSERT INTO t VALUES (5,7,40) ON DUPLICATE KEY UPDATE c=c+100;
Това обаче работи само в 4.1 и нагоре
salle.online.bg/sig
Re: REPLACE = DELETE + INSERT
hmm iavno si prav ama nikak ne me kefi ideiata osobeno s chasta za mysql v4.xx
Re: ?
Ami kat za nachalo 4.x.x neshto mnogo bugavichka e vse oshte ne che 3.x.x ne e ama pone malko po izchistena e eto edin mnogo svej prmer na koito se zasmiahme drujno :)
moje li
select count(*) from....... limit 100
da e 100% po byrzo ot syshtoto bez limit kade e logikata...
da naistina v 4.x.x na mysql-a predlaga dosta udobni "novi" tools no vse oshte ne e gotova za production use .. tova e lichno moe mnenie ne sluchaino e(gama)
moje li
select count(*) from....... limit 100
da e 100% po byrzo ot syshtoto bez limit kade e logikata...
da naistina v 4.x.x na mysql-a predlaga dosta udobni "novi" tools no vse oshte ne e gotova za production use .. tova e lichno moe mnenie ne sluchaino e(gama)
Re: REPLACE ??
понеже съм доста разсеян забравих да спомена, че най-хитрия вариант е друг - те са два (не е select ако има update, ако не insert)
1.
$res = mysql_query('INSERT .......');
if (!mysql_affected_rows($res)) {
mysql_query('UPDATE ...... ');
}
2.
do{
$res = mysql_query('UPDATE .....');
if (mysql_affected_rows($res)) {
break;
}
$res = mysql_query('INSERT .....');
if (mysql_affected_rows($res)) {
break;
}
}while (1);
първият вариант е ако се случва по-често insert, а втория ако има повече update
1.
$res = mysql_query('INSERT .......');
if (!mysql_affected_rows($res)) {
mysql_query('UPDATE ...... ');
}
2.
do{
$res = mysql_query('UPDATE .....');
if (mysql_affected_rows($res)) {
break;
}
$res = mysql_query('INSERT .....');
if (mysql_affected_rows($res)) {
break;
}
}while (1);
първият вариант е ако се случва по-често insert, а втория ако има повече update
Re: REPLACE ??
YO ne e zle dosta semplo no i syshto tolkova kefeshto reshenie 10x man 
Re: ?
Хайде го демонстрирай това
SELECT COUNT(*) FROM ... LIMIT 100;
Какво има във FROM и има ли WHERE и т.н.
Ако е бъг да го оправим. Ако е примерно QCache в действие - тогава даже е чудесно :)
А кои сте тези дето сте се смели и на какво?
А знаеш ли какво ТОЧНО означава gamma във версиите на MySQL? Явно не.
всъщност 4.0.9 замалко да излезе без gamma-та
salle.online.bg/sig
SELECT COUNT(*) FROM ... LIMIT 100;
Какво има във FROM и има ли WHERE и т.н.
Ако е бъг да го оправим. Ако е примерно QCache в действие - тогава даже е чудесно :)
А кои сте тези дето сте се смели и на какво?
А знаеш ли какво ТОЧНО означава gamma във версиите на MySQL? Явно не.
всъщност 4.0.9 замалко да излезе без gamma-та
salle.online.bg/sig