REPLACE INTO nem működik. [MEGOLDVA]

Üdv mindeninek,

Sajnos nem vagyok SQL expert ezért egy kis segítséget szeretnék kérni mysql ügyben.

Adatot gyűjtök adatbázisba és sokszor előfordul, hogy az időközönként kapott adat nem új adat hanem az előző.
Szeretném elkerülni azt, hogy ilyen esetekben többszörösen legyen ugyanaz az adat az adatbázisban.
Arra gondoltam, hogy a REPLACE INTO segítségével ez megoldható.


CREATE TABLE testing (city INT, date DATETIME, value FLOAT) ENGINE=MyIsam DEFAULT CHARSET=UTF8;

REPLACE INTO testing (city,date,value) VALUES (35,'2012-11-30 21:00:00',3.81);
REPLACE INTO testing (city,date,value) VALUES (35,'2012-11-30 21:00:00',3.81);

SELECT * FROM testing;
+------+---------------------+-------+
| city | date | value |
+------+---------------------+-------+
| 35 | 2012-11-30 21:00:00 | 3.81 |
| 35 | 2012-11-30 21:00:00 | 3.81 |
+------+---------------------+-------+

Látszólag duplikálódnak az adatok pedig ha már létezik egy megegyező rekord akkor nem kellene...

Én gondolom rosszul a REPLACE működését vagy rosszul csinálok valamit?

A válaszokat előre is köszönöm.

Hozzászólások

A replace into egyedi kulcs egyezés esetén cserél csak, egyébként insert történik. RTFM :)

-----------
"640GB sokmindenre elég"

Mi tagadás, inkább DBA oldalról nézem ezt, nem fejlesztőiről (a fejlesztó kezelje le a hibakódot): ha X-et X-re cserélek a bufferpoolban/OS cache-ben, az dirty bit lesz adat- és indexlapon egyaránt, ami felesleges lemezszinket fog eredményezni, míg ha megpróbálok beszúrni, akkor csak az indexbe pillantok, hibakódot dobok, és megyek tovább.

Köszönöm a választ. Sejtettem, hogy a hiányos ismereteim miatt nem csinálok jól valamit.

Ebben az esetben már úgy működik ahogy vártam:

CREATE TABLE testing (city INT, date DATETIME, value FLOAT, UNIQUE (city,date,value) ) ENGINE=MyIsam DEFAULT CHARSET=UTF8;

--
maszili

szvsz, inkabb insert into on duplicate keyt hasznalj, mert a replace az egy atomi delete+insert!

--
A vegtelen ciklus is vegeter egyszer, csak kelloen eros hardver kell hozza!

DB400-on működik így is:

INSERT INTO testing (city,date,value) select 35, '2012-11-30 21:00:00', 3.81 from testing where (city,date,value) = (35, '2012-11-30 21:00:00', 3.81) having count(*) = 0;