Maison > Article > base de données > Introduction détaillée à MySQL innodb_autoinc_lock_mode
L'éditeur suivant vous présentera une introduction à MySQL innodb_autoinc_lock_mode. L'éditeur le trouve plutôt bon, je vais donc le partager avec vous maintenant et le donner comme référence pour tout le monde. 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] Description de innodb_autoinc_lock_mode
innodb_auto_lockmode a trois valeurs :
1, 0 signifie tradition
2, 1 signifie cohérent
3, 2 signifie entrelacé
【1.1】mode tradition(innodb_autoinc_lock_mode=0) :
1. Il offre une capacité de compatibilité descendante
2. ("insérer comme") doit 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. Notez qu'il s'agit d'un niveau d'instruction plutôt que d'un niveau de transaction, une transaction peut en contenir un. ou plusieurs déclarations.
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 | ligne, alors l'une de ces trois valeursest 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 inquiétez pasMettre à 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 la forme d'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 À l'époque d'étape, mysql sait que la prochaine valeur 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.
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!