Je to příklad zamykání automatického přírůstku v InnoDB:Protože provádíte 2 příkazy současně ve stejné relaci:zámek automatického přírůstku je získán prvním dotazem a generování hodnoty automatického přírůstku se mezi příkazy neprokládá – to je celý smysl transakce.
To se vždy stane záměrně:Pokud by tomu tak nebylo, způsob, jakým fungují transakce v InnoDB, by nefungoval. Škálovatelnost při zatížení typu OLTP by byla strašná, protože každá břitová destička by musela čekat na dokončení, potvrzení nebo hůře na její vrácení.
T.j.:Pokud vaše první vložení běží 5x déle než vaše druhé a selže a je vráceno zpět, druhá se stále dokončí a byla potvrzena. Jinak byste museli čekat na ea. dotaz, který má být dokončen po druhém.
Pokud požadujete sekvenční a absolutně jedinečná ID #, získejte je z jiného zdroje. Sloupce AutoInc jednoduše zaručují jedinečnou hodnotu – ne nutně monosekvenci – což je bod serializace a úzké hrdlo.
Jeden způsob, jak to obejít, je-li požadováno jinak:
nastavte innodb_autoinc_lock_mode = 0
ve vašem my.cnf/mysql.ini
Popis automatického zamykání v InnoDB a Options