© 2013 All rights reserved.
2

MYSQL: INSERT ON DUPLICATE KEY (LAST_INSERT_ID)

Problém při vracení Idečka naposled upraveného záznamu z tabulky při použití v dotazu ON DUPLICATE KEY

Máme tabulku se strukturou například podobné této:

Na tabulku chceme provést insert, ale v případě duplicitních klíčů (primární klíče jsou v tabulce nastaveny pro string_value a domain_id) chceme pouze zvýšit hodnotu ve sloupci string_count, prostě klasický dotaz, se kterým se často setkáváme.

V tomhle není žádný problém, provedeme jednoduchý dotaz:

Problém nastane v případě, že chceme zjistit naposled vložené nebo upravené table_id, kedy hodnotu primárního klíče.

Při samotném insertu bychom použili funkci LAST_INSERT_ID(), která nám jeho vrátí hodnotu nejvyššího ID:

Ovšem při použití ON DUPLICATE KEY toto možné není.

Při uložení nového záznamu nám LAST_INSERT_ID opravdu vrací hodnotu nového záznamu, ovšem u provedeného update vrátí hodnotu maximálhího ID + 1, na kterou je nastaveno.

 

Řešení je velice jednoduché:

V tomto případě nám zavolání LAST_INSERT_ID() bude konečně vracet hodnotu naposled upraveného záznamu bez ohledu na to, zda jsme prováděli UPDATE nebo INSERT na tabulku.

Comments (2)

Diky :-)

Add comment

About
Hi, i am programmer from the Czech Republic. I love web development (Ruby, Ruby on Rails, PHP, Nette) and iOS development (Objective-C, Cocoa).
To cooperate, here is my phone:
+420 608 836