Mysql
 sql >> Datenbank >  >> RDS >> Mysql

INSERT IGNORE erhöht den automatischen Inkrementzähler, auch wenn kein Datensatz hinzugefügt wird?

Zitat aus der Manual Page für INSERT :

Das INSERT IGNORE Syntax ist nur eine Möglichkeit, bestimmte Fehlermeldungen zu unterdrücken, und sie ist hilfreich, wenn Sie wissen, dass diese Fehler auftreten können, und/oder sie zu einem späteren Zeitpunkt behandeln möchten. Hinter den Kulissen haben Sie immer noch eine reguläre Einfügung, außer dass sie aufgrund eines verletzten Schlüssels fehlschlägt. MySQL benötigt die tatsächlichen Zeilenwerte, um eine Einfügung vorzunehmen, und der AUTO_INCREMENT-Zähler erhöht sich gemäß normale Regeln :

  1. Der Wert für die Spalte ist NULL.
  2. Der Wert für die Spalte ist nicht gesetzt.
  3. Der Wert für die Spalte ist größer als der Zähler.

Wenn Sie also Ihre Logik nicht überdenken können (z. B. testen, ob die Schlüsselwerte vorhanden sind, bevor Sie die Einfügung vornehmen), ist die einzige Möglichkeit, zurückzusetzen der Zähler ist ALTER TABLE :

ALTER TABLE t2 AUTO_INCREMENT = value;