Mysql
 sql >> Base de données >  >> RDS >> Mysql

Pourquoi mysql ignore-t-il certains identifiants d'incrémentation automatique ?

C'est un exemple de verrouillage automatique de l'incrémentation dans InnoDB :comme vous exécutez 2 instructions simultanément dans la même session :le verrouillage automatique de l'incrémentation est obtenu par la première requête, et la génération de valeur d'auto-incrémentation n'est pas entrelacée entre les instructions - c'est tout l'intérêt de transaction.

Cela se produira toujours par conception :si ce n'était pas le cas, la façon dont les transactions dans InnoDB fonctionnent, eh bien, ne fonctionnerait pas. L'évolutivité sous des charges de type OLTP serait horrible car chaque insertion devrait attendre que toutes les autres insertions se terminent, soient validées ou pire - annulées.

C'est-à-dire :si votre première insertion s'exécute 5 fois plus longtemps que la seconde, échoue et est annulée, la seconde se termine toujours et a été validée. Sinon, vous devrez attendre ea. requête à compléter après l'autre.

Si vous avez besoin de numéros d'identification séquentiels et absolument uniques, extrayez-les d'une autre source. Les colonnes AutoInc garantissent simplement une valeur unique - pas nécessairement une monoséquence - qui est un point de sérialisation et un goulot d'étranglement.

Une façon de contourner cela si nécessaire :

définir innodb_autoinc_lock_mode = 0 dans votre my.cnf/mysql.ini

Description du verrouillage automatique inc dans InnoDB et Options