Hello,
http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html
INSERT INTO table (a,b,c) VALUES (1,2,3)
ON DUPLICATE KEY UPDATE id=LAST_INSERT_ID(id), c=3;
> >
> > Und was passiert mit Relationen bei diesem Statement?
> > Sind die dann anschließend kaputt?
Ich habe das jetzt mal selber ausprobiert.
CREATE TABLE `duplicate\_test` (
`ID` INT(10) NOT NULL AUTO\_INCREMENT,
`name` VARCHAR(50) NOT NULL DEFAULT '',
`place` VARCHAR(50) NOT NULL DEFAULT '',
`number` INT(11) NOT NULL DEFAULT '1',
PRIMARY KEY (`ID`),
UNIQUE INDEX `name\_place` (`name`, `place`)
)
COLLATE='latin1\_swedish\_ci'
ENGINE=InnoDB;
insert into duplicate\_test set name='maria', place='rom'
on duplicate key update
id=LAST\_INSERT\_ID(id),
number=number+1;
select last\_insert\_id();
Das funktioniert ja tatsächlich ganz hervorragend. Bei einem Update wird die ID des bereits vorhandenen Datensatzes zurückgegeben, somit bleibt die refenzielle Integrität also auch gewahrt.
Beim Insert entsteht natürlich eine neue ID.
Einzige Macke: es werden IDs vergeudet. Bei jedem Update wird eine neue ID verbraucht, aber (wie oben beschreiben) nicht im Datensatz eingetragen. Die nächste Autoincrement-ID ist dann ensprechend höher.
Wozu das nun gut sein soll, oder ob es nur ein Bug ist, weiß ich noch nicht. Vielleicht hast Du ja eine Idee.
Liebe Grüße aus dem schönen Oberharz
Tom vom Berg
![](http://selfhtml.bitworks.de/Virencheck.gif)
--
☻\_
/▌
/ \ Nur selber lernen macht schlau
<http://bergpost.annerschbarrich.de>