Heim  >  Artikel  >  Datenbank  >  Detaillierte Einführung in MySQL innodb_autoinc_lock_mode

Detaillierte Einführung in MySQL innodb_autoinc_lock_mode

黄舟
黄舟Original
2017-03-18 13:49:261181Durchsuche

Der folgende Editor bietet Ihnen eine Einführung in MySQL innodb_autoinc_lock_mode. Der Herausgeber findet es ziemlich gut, deshalb werde ich es jetzt mit Ihnen teilen und es allen als Referenz geben. Folgen wir dem Editor, um einen Blick darauf zu werfen.

Der Parameter innodb_autoinc_lock_mode steuert das Verhalten verwandter Sperren beim Einfügen von Daten in eine Tabelle mit einer auto_increment-Spalte.

Durch seine Festlegung können Leistung und Leistung verbessert werden erreicht Gleichgewicht der Sicherheit (Master-Slave-Datenkonsistenz)

[0] Lassen Sie uns zunächst Einfügungen klassifizieren

Zuallererst kann Einfügung im Allgemeinen geteilt werden in drei Kategorien:

1. Einfache Einfügung wie „Einfügen in t(name)“-Werte(‘test’)

2. Masseneinfügung wie „Ladedaten“. into.. select .... from ....

3. b') ,(5,'c');

[1] Beschreibung von innodb_autoinc_lock_mode

innodb_auto_lockmode hat drei Werte:

1, 0 bedeutet Tradition

2, 1 bedeutet kohärent

3, 2 bedeutet verschachtelt

【1.1】tradition(innodb_autoinc_lock_mode=0) Modus:

Es bietet eine Abwärtskompatibilitätsfunktion

2 („insert like“) muss am Anfang der Anweisung eine auto_inc-Sperre auf Tabellenebene erhalten und die Sperre am Ende der Anweisung aufheben. Beachten Sie, dass es sich hierbei um eine Anweisungsebene und nicht um eine Transaktionsebene handelt oder mehr Aussagen.

3. Es kann die Vorhersagbarkeit, Kontinuität und Wiederholbarkeit der Werteverteilung gewährleisten. Dadurch wird auch sichergestellt, dass die Einfügeanweisung beim Kopieren auf den Slave-Wert identisch ist Sicherheit der anweisungsbasierten Replikation).

4. Da die auto_inc-Sperre in diesem Modus bis zum Ende der Anweisung beibehalten wird, wirkt sich dies auf das gleichzeitige Einfügen aus.

[1.2] fortlaufender (innodb_autoinc_lock_mode=1) Modus:

1. In diesem Modus wurde das einfache Einfügen optimiert Die Anzahl der gleichzeitig eingefügten Werte kann sofort bestimmt werden, sodass MySQL für diese Einfügeanweisung im Allgemeinen mehrere aufeinanderfolgende Werte gleichzeitig generieren kann. Dies ist auch für die Replikation sicher (es gewährleistet die Sicherheit der Anweisung). Replikation)

2. Dieser Modus ist auch der Standardmodus von MySQL. Der Vorteil dieses Modus besteht darin, dass die auto_inc-Sperre nicht bis zum Ende der Anweisung bestehen bleibt Entsprechendem Wert kann die Sperre im Voraus aufgehoben werden In diesem Modus gibt es keine auto_inc-Sperre, daher ist die Leistung in diesem Modus am besten. Es gibt jedoch auch ein Problem: Die für dieselbe Anweisung erhaltenen auto_incremant-Werte sind möglicherweise nicht kontinuierlich.

【2】Wenn Ihr Binärdateiformat gemischt ist |, dann ist jeder dieser drei Werte für Sie kopiersicher.

Da MySQL jetzt empfiehlt, das Binärformat auf row zu setzen, ist es am besten, innodb_autoinc_lock_mode=2 zu verwenden, wenn binlog_

for

mat keine Anweisung ist. Dies ist möglicherweise bekannt . Bessere Leistung.

Beenden Sie abschließend mit einem Beispiel zu auto_incrementBeispiel: Machen Sie sich nicht die Mühe, den Wert einer auto_increment-Spalte zu

zu aktualisieren

Schritt 1: Reproduzieren Sie die Szene

Schritt 2: Reproduzieren Sie die SQL, die das Problem verursacht hat

Schritt 3: Reproduzieren Sie die übliche Ausdrucksform

create table t(x int auto_increment not null primary key);
insert into t(x) values(0),(null),(3);
select * from t;
+---+
| x |
+---+
| 1 |
| 2 |
| 3 |
+---+

Schritt 4: Zusammenfassung des Problems

update t set x=4 where x=1;
select * from t;
+---+
| x |
+---+
| 2 |
| 3 |
| 4 |
+---+

Nach der Ausführung des ersten Schritts Zum Zeitpunkt von Schritt weiß MySQL, dass der nächste auto_increment-Wert 4 ist. Nach der Ausführung des zweiten Schritts wusste MySQL nicht, dass 4 künstlich belegt war, sodass beim Ausführen des dritten Schritts ein Fehler auftrat.

Das obige ist der detaillierte Inhalt vonDetaillierte Einführung in MySQL innodb_autoinc_lock_mode. 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