Heim >Datenbank >MySQL-Tutorial >Wie verhindert man die automatische Inkrementierung von InnoDB bei doppelten Schlüsselaktualisierungen?

Wie verhindert man die automatische Inkrementierung von InnoDB bei doppelten Schlüsselaktualisierungen?

Mary-Kate Olsen
Mary-Kate OlsenOriginal
2024-11-15 06:20:03256Durchsuche

How to Prevent InnoDB Auto Incrementing on Duplicate Key Updates?

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!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn