Heim  >  Artikel  >  Datenbank  >  Detailliertes Beispiel der Methode innodb_autoinc_lock_mode

Detailliertes Beispiel der Methode innodb_autoinc_lock_mode

Y2J
Y2JOriginal
2017-05-24 13:47:362531Durchsuche

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. gemischte Einfügung wie insert into t(id,name) effects(1,'a'),( null,'b'),(5,'c');

[1] Beschreibung von innodb_autoinc_lock_mode

innodb_auto_lockmode hat drei Werte:

1. 0 Das bedeutet Tradition

2. Das bedeutet kohärent

3 >

【1.1】tradition(innodb_autoinc_lock_mode=0) Modus:

1. Es bietet eine Abwärtskompatibilitätsfunktion


2. In diesem Modus müssen alle Einfügeanweisungen („insert like“) am Anfang der Anweisung eine auto_inc-Sperre auf Tabellenebene erhalten und die Sperre am Ende der Anweisung aufheben Hier handelt es sich um die Anweisungsebene und nicht um die Transaktionsebene. Eine Transaktion kann eine oder mehrere Anweisungen enthalten.


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 gehalten wird, wirkt sich dies auf das gleichzeitige Einfügen aus.

【1.2】consecutive(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

【1.3】interleaved(innodb_autoinc_lock_mode=2) Modus

1 Da 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_

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

Beenden Sie abschließend mit einem Beispiel zu auto_increment

Beispiel:

Machen Sie sich nicht die Mühe, den Wert einer auto_increment-Spalte zu zu aktualisieren

Schritt 1: Reproduzieren Sie die Szene


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 2: Reproduzieren Sie die SQL, die das Problem verursacht hat


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

Schritt 3: Reproduzieren Sie den üblichen Ausdruck


insert into t(x) values(0);
ERROR 1062 (23000): Duplicate entry '4' for key 'PRIMARY'

Schritt 4: Zusammenfassung des Problems

Nach der Ausführung des ersten Schritts 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.

[Verwandte Empfehlungen]

1.

Mysql kostenloses Video-Tutorial

2.

Detaillierte Erklärung des Fehlers des Tabellenprimärschlüssels innodb_index_stats importiert Daten

3.

Detailliertes Beispiel für innodb_autoinc_lock_mode in MySQL

4.

Detailliertes Beispiel für das Hinzufügen neuer Benutzerberechtigungen in MySQL

5.

Detailliertes Beispiel der init_connect-Methode in MySQL

Das obige ist der detaillierte Inhalt vonDetailliertes Beispiel der Methode 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