Automatische Inkrementierungssteuerung von InnoDB für doppelte Schlüssel
Die InnoDB-Engine von MySQL bietet eine Funktion zur automatischen Inkrementierung von Primärschlüsseln für Tabellen und generiert automatisch eindeutige Bezeichner für jede Zeile. Allerdings erhöht InnoDB standardmäßig auch den Primärschlüssel bei doppelten Schlüsselaktualisierungen, was zu nicht aufeinanderfolgenden Werten führt.
Automatische Inkrementierung bei Duplikaten vermeiden
Um dieses Problem zu verhindern Um aufeinanderfolgende Werte für die automatische Inkrementierung beizubehalten, können Sie die Konfigurationsoption innodb_autoinc_lock_mode ändern. Wenn Sie es auf „0“ setzen, wechseln Sie in den „herkömmlichen“ Auto-Inkrement-Sperrmodus, der sicherstellt, dass den AUTO_INCREMENT-Spalten auch bei doppelten Schlüsselaktualisierungen aufeinanderfolgende Werte zugewiesen werden.
Konfigurieren von InnoDB Auto- Inkrementierungsmodus
Legen Sie den innodb_autoinc_lock_mode-Wert in Ihrer MySQL-Konfigurationsdatei fest, normalerweise unter /etc/my.cnf oder /my.ini.
[mysqld] innodb_autoinc_lock_mode=0
Tabellenstruktur und Abfragebeispiel
Ihre Tabellenstruktur und Abfrage im bereitgestellten Kontext lauten wie folgt:
CREATE TABLE IF NOT EXISTS `table` ( `id` int(11) NOT NULL AUTO_INCREMENT, `field1` varchar(200) NOT NULL, `field2` varchar(255) NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `field1` (`field1`), KEY `id` (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=1 ; INSERT INTO table ( field1, field2 ) VALUES (:value1, :value2) ON DUPLICATE KEY UPDATE field1 = :value1, field2 = :value2
Wenn innodb_autoinc_lock_mode auf „0“ gesetzt ist, aktualisiert diese Abfrage doppelte Datensätze ohne Inkrementierung die ID-Spalte, um fortlaufende Werte für neue Einfügungen sicherzustellen.
Achtung:
Beachten Sie, dass es keine gute Vorgehensweise ist, sich in Ihrer Anwendung auf aufeinanderfolgende IDs mit automatischer Inkrementierung zu verlassen. Werte für die automatische Inkrementierung dienen der eindeutigen Identifizierung und sollten nicht für Sortier- oder Sortierzwecke verwendet werden.
Das obige ist der detaillierte Inhalt vonWie verhindert man die automatische Inkrementierung von InnoDB bei doppelten Schlüsselaktualisierungen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!