Mysql
 sql >> Database >  >> RDS >> Mysql

INSERT IGNORE aumenta il contatore dell'incremento automatico anche se non viene aggiunto alcun record?

Citando dalla pagina del manuale per INSERT :

Il INSERT IGNORE la sintassi è solo un modo per sopprimere determinati messaggi di errore ed è utile quando si è consapevoli che tali errori potrebbero verificarsi e/o si desidera gestirli in una fase successiva. Dietro le quinte, hai ancora un inserto normale, tranne per il fatto che fallisce a causa di una chiave violata. MySQL ha bisogno dei valori di riga effettivi per fare un inserimento e il contatore AUTO_INCREMENT aumenterà in base a regole regolari :

  1. Il valore della colonna è NULL.
  2. Il valore per la colonna non è impostato.
  3. Il valore della colonna è maggiore del contatore.

Quindi, a meno che tu non possa ripensare alla tua logica (ad es. verificare se i valori chiave esistono prima di eseguire l'inserimento), l'unico modo per reimpostare il contatore è ALTER TABLE :

ALTER TABLE t2 AUTO_INCREMENT = value;