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

Proč mysql přeskočí některá ID automatického zvýšení?

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



  1. Jaká je velikost sloupce int(11) v mysql v bajtech?

  2. mysql automaticky ukládá časové razítko vytvoření záznamu

  3. Konfigurace skupin dostupnosti AlwaysOn – část 2

  4. Jak integrovat Apache Spark s MySQL pro čtení databázových tabulek jako datového rámce jiskry?