Maison  >  Article  >  base de données  >  Exemple détaillé de la méthode innodb_autoinc_lock_mode

Exemple détaillé de la méthode innodb_autoinc_lock_mode

Y2J
Y2Joriginal
2017-05-24 13:47:362540parcourir

L'éditeur suivant vous présentera une introduction à MySQL innodb_autoinc_lock_mode. L'éditeur pense que c'est plutôt bien, alors je vais le partager avec vous maintenant et le donner comme référence. Suivons l'éditeur pour y jeter un œil.

Le paramètre innodb_autoinc_lock_mode contrôle le comportement des verrous associés lors de l'insertion de données dans une table avec une colonne auto_increment

En le définissant, les performances et les performances peuvent être améliorées ; atteint Équilibre de sécurité (cohérence des données maître-esclave)

[0] Classons d'abord les insertions

Tout d'abord, l'insertion peut généralement être divisée en trois catégories :

1. Insertion simple telle que l'insertion dans les valeurs t(name) ('test')

2. into.. select .... from ....

3. insertion mixte telle que insérer dans t(id,name) valeurs(1,'a'),( null,'b'),(5,'c');

[1] La description de innodb_autoinc_lock_mode

innodb_auto_lockmode a trois valeurs :

1. 0 Cela signifie tradition

2. 1 Cela signifie cohérent

3 Cela signifie entrelacé

【1.1】mode tradition(innodb_autoinc_lock_mode=0) :

1. Il offre une capacité de compatibilité ascendante


2. Dans ce mode, toutes les instructions d'insertion ("insert like") doivent obtenir un verrou auto_inc au niveau de la table au début de l'instruction et libérer le verrou à la fin de l'instruction, ce dont nous parlons. voici le niveau de l'instruction plutôt que le niveau de la transaction. Une transaction peut contenir une ou plusieurs instructions.


3. Il peut garantir la prévisibilité, la continuité et la répétabilité de la distribution des valeurs. Cela garantit également que l'instruction d'insertion peut être générée de la même manière que la valeur maître lorsqu'elle est copiée sur la valeur esclave. sécurité de la réplication basée sur les instructions).


4. Étant donné que le verrou auto_inc est maintenu jusqu'à la fin de l'instruction dans ce mode, cela affecte l'insertion simultanée.

[1.2] mode consécutif(innodb_autoinc_lock_mode=1) :

1. Dans ce mode, l'insertion simple a été optimisée depuis l'insertion simple. Le nombre de valeurs insérées en même temps peut être déterminé immédiatement, de sorte que MySQL peut générer plusieurs valeurs consécutives à la fois pour cette instruction d'insertion. En général, cela est également sûr pour la réplication (cela garantit la sécurité des instructions basées sur l'instruction ; réplication)


2. Ce mode est également le mode par défaut de mysql L'avantage de ce mode est que le verrou auto_inc ne reste pas jusqu'à la fin de l'instruction. valeur correspondante, le verrou peut être libéré à l'avance

【1.3】entreleaved(innodb_autoinc_lock_mode=2) mode

1. il n'y a pas de verrou auto_inc dans ce mode, donc dans ce mode les performances sont les meilleures ; mais il y a aussi un problème, c'est-à-dire que les valeurs auto_incremantes qu'il obtient pour la même instruction peuvent ne pas être continues.

【2】Si votre format de fichier binaire est mixte | alors l'une de ces trois valeurs est protégée contre la copie pour vous.

Étant donné que mysql recommande désormais de définir le format binaire sur row, il est préférable d'utiliser innodb_autoinc_lock_mode=2 lorsque binlog_

format n'est pas une instruction. Cela peut être connu. .Meilleures performances.

Enfin, terminez par un exemple sur auto_increment

Exemple :

Ne vous embêtez pas à mettre à jourla valeur d'une colonne auto_increment

Étape 1 : Reproduire la scène


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 |
+---+

Étape 2 : Reproduire le SQL à l'origine du problème


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

Étape 3 : Reproduire l'expression habituelle


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

Étape 4 : Résumé du problème

Après avoir exécuté la première étape, mysql sait que la prochaine valeur d'auto_increment est 4.

Après avoir exécuté la deuxième étape, mysql ne savait pas que 4 avait été artificiellement occupé, donc une erreur s'est produite lors de l'exécution de la troisième étape.

[Recommandations associées]

1.

Tutoriel vidéo gratuit MySQL

2.

Explication détaillée de l'erreur de conflit de clé primaire de table lorsque innodb_index_stats importe des données

3.

Exemple détaillé d'innodb_autoinc_lock_mode dans MySQL

4

Exemple détaillé d'ajout de nouvelles autorisations utilisateur dans MySQL

5.

Exemple détaillé de la méthode init_connect dans mysql

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn