sql >> Databáze >  >> RDS >> Mysql

mysql - po vložení ignorovat získat primární klíč

Dokumentace pro LAST_INSERT_ID() říká:

Když to víte, můžete z toho udělat vícekrokový proces:

  • INSERT IGNORE
  • pokud LAST_INSERT_ID(), tak hotovo (byl vložen nový řádek)
  • jinak VYBERTE svůj_primární klíč FROM yourtable WHERE (jedinečná omezení vašich vložených dat)

Příklad se státy USA:

id  | abbrev | other_data
 1  | AL     | ...
 2  | AK     |

UNIQUE KEY abbr (abbrev)

Nyní vložení nového řádku:

INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AZ','foo bar');
> OK
SELECT LAST_INSERT_ID();
> "3"
// we have the ID, we're done

Vložení řádku, který bude ignorován:

INSERT IGNORE INTO `states` (`abbrev`,`other_data`) VALUES ('AK','duplicate!');
> OK
SELECT LAST_INSERT_ID();
> "0"
// oops, it already exists!
SELECT id FROM `states` WHERE `abbrev` = 'AK'; // our UNIQUE constraint here
> "2"
// there we go!

Alternativně existuje možné řešení, jak to udělat v jednom kroku – použijte REPLACE INTO místo INSERT IGNORE INTO - syntaxe je velmi podobná . Upozorňujeme však, že existují vedlejší účinky s tímto přístupem – tyto mohou nebo nemusí být pro vás důležité:

  • REPLACE odstraní a znovu vytvoří řádek
    • takže se spouštějí spouštěče DELETE
    • také primární ID bude zvýšeno, i když řádek existuje
    • INSERT IGNORE zachová data starého řádku, REPLACE jej nahradí novými daty řádku


  1. Uložení obrázku v MySQL z Javy

  2. Python:Jak získám čas z objektu datetime.timedelta?

  3. SYSDATE() vs NOW() v MySQL:Jaký je rozdíl?

  4. Příklady RADIANS() v SQL Server