sql >> Databasteknik >  >> RDS >> Mysql

Varför hoppar mysql över några automatiska inkrement-ID?

Det är ett exempel på automatisk inkrementlåsning i InnoDB:Eftersom du kör 2 satser samtidigt i samma session:det automatiska inkrementlåset erhålls av den första frågan och genereringen av autoinkrementvärde interfolieras inte mellan satserna - det är hela poängen transaktion.

Detta kommer alltid att ske av design:Om det inte gjorde det, så skulle transaktionerna i InnoDB inte fungera. Skalbarheten under belastningar av OLTP-typ skulle vara hemsk eftersom varje insats skulle behöva vänta på att varannan insats ska slutföras, sätta igång, eller ännu värre - rullas tillbaka.

Dvs:Om din första insättning går 5 gånger längre än din andra, och misslyckas och rullas tillbaka, slutförs den andra fortfarande och har genomförts. Annars får du vänta på ea. fråga för att vara komplett efter den andra.

Om du behöver sekventiella och absolut unika ID-nummer, hämta dem från en annan källa. AutoInc-kolumner garanterar helt enkelt ett unikt värde - inte nödvändigtvis en monosekvens - som är en punkt för serialisering och en flaskhals.

En väg runt detta om annat krävs:

ställ in innodb_autoinc_lock_mode = 0 i din my.cnf/mysql.ini

Beskrivning av automatisk inc-låsning i InnoDB och Options



  1. Så här använder du Where-satsen i Select Statement i SQL Server - SQL Server / TSQL självstudie del 109

  2. körtidsfel:java.lang.ClassNotFoundException:com.mysql.jdbc.Driver

  3. Vad jag ska välja - JSON eller SQLite?

  4. Skapa en databasdump för specifika tabeller och poster Postgres