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

Colonnes d'incrémentation automatique MySQL sur TRANSACTION, COMMIT et ROLLBACK

Non, les mécanismes d'auto-incrémentation doivent travailler en dehors de la portée des transactions, car un autre utilisateur peut insérer dans la même table avant que vous ne terminiez votre transaction. La transaction de l'autre utilisateur doit être en mesure d'allouer la valeur suivante, avant de savoir si votre transaction utilise la valeur que vous venez d'allouer.

Concernant votre commentaire :si je peux le dire plus clairement, tout changement dans la portée d'une transaction peut être annulé. Le compteur d'incrémentation automatique n'est pas annulé, il n'obéit donc pas à l'atomicité d'opérations. Il n'obéit pas non plus à l'isolement car une autre transaction obtient la valeur suivante même si votre transaction n'a pas encore été validée.

Le fonctionnement de l'auto-incrémentation signifie que parfois, si vous insérez des lignes puis annulez votre transaction, les valeurs que vous avez allouées avec l'auto-incrémentation sont perdues à jamais !

Mais ça va. Les valeurs de clé primaire doivent être uniques, mais elles n'ont pas besoin d'être consécutives. En d'autres termes, ce ne sont pas des numéros de ligne et vous ne devriez pas les utiliser comme ça. Vous ne devriez donc jamais avoir à décrémenter les valeurs créées par auto-incrémentation.