REPLACE ??

10 отговора 342 прегледа
#1

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..

Отговор
в отговор на menta2k #2

UPDATE

UPDATE test SET b=b+1;

Отговор
в отговор на Dakota #3

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...

Отговор
в отговор на menta2k #4

Re: UPDATE.. ne e tva ideiata :(

както си написал от документацията, REPLACE първо изтрива и после insert-ва, та с replace това което искаш нестава ;-( трябва да ползваш варианта, който си описал SELECT , ако има update, ако не insert

п.с.
на таблицата както си я описал UNIQUE KEY-а е ненужен, тъй като PRIMARY KEY включва в себе си уникалност

Отговор
в отговор на menta2k #5

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
Отговор
в отговор на salle #6

Re: REPLACE = DELETE + INSERT

hmm iavno si prav ama nikak ne me kefi ideiata osobeno s chasta za mysql v4.xx

Отговор
в отговор на menta2k #7

Re: ?

Това не го разбрах.

salle.online.bg/sig
Отговор
в отговор на salle #8

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)

Отговор
в отговор на menta2k #9

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

Отговор
в отговор на phpGuru #10

Re: REPLACE ??

YO ne e zle dosta semplo no i syshto tolkova kefeshto reshenie 10x man

Отговор
в отговор на menta2k #11

Re: ?

Хайде го демонстрирай това
SELECT COUNT(*) FROM ... LIMIT 100;

Какво има във FROM и има ли WHERE и т.н.

Ако е бъг да го оправим. Ако е примерно QCache в действие - тогава даже е чудесно :)

А кои сте тези дето сте се смели и на какво?

А знаеш ли какво ТОЧНО означава gamma във версиите на MySQL? Явно не.

всъщност 4.0.9 замалко да излезе без gamma-та

salle.online.bg/sig
Отговор