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

Uzamkne INSERT IGNORE tabulku, i když ignoruje vložení?

Záleží na enginu - MyIsam a InnoDb se chovají odlišně.

Pokud v tabulce MyIsam již existuje záznam (i když ještě není potvrzen), běžný INSERT stejného záznamu ( stejný jedinečný klíč) v druhé relaci hlásí chybu duplicitního klíče - takže INSERT IGNORE pouze ignoruje chybu a pokračuje dále.

Pokud není záznam v tabulce InnoDB uzamčen, běžný INSERT okamžitě nahlásit chybu duplicitního klíče (INSERT IGNORE chybu přeskočí a bude pokračovat).
Pokud je ale záznam uzamčen jinou relací (například záznam je vložen, ale ještě není potvrzen, nebo je záznam uzamčen UPDATE nebo DELETE nebo SELECT FOR UPDATE), příkaz INSERT se „zasekne“ a bude čekat, dokud druhá relace neodstraní zámek (pomocí COMMIT nebo ROLLBACK). Pokud pak záznam po odstranění zámku stále existuje, INSERT ohlásí chybu (INSERT IGNORE bude chybu ignorovat), ale pokud záznam neexistuje, INSERT přidá tento záznam do tabulky.

Klíčové slovo IGNORE říká pouze "v případě jakékoli chyby ji ignorujte a pokračujte", ale neovlivňuje chování zamykání.




  1. PHP 7 RC3:Jak nainstalovat chybějící MySQL PDO

  2. Odstraňte a omezte překrývající se období

  3. Vrácení více tabulek z uložené procedury

  4. Změna a uložení uživatelských dat mysql v tabulce zobrazení, která zobrazuje data uživatele