Maison  >  Article  >  base de données  >  Introduction détaillée aux niveaux d'isolation des transactions de base de données MySQL

Introduction détaillée aux niveaux d'isolation des transactions de base de données MySQL

黄舟
黄舟original
2017-03-16 13:38:111581parcourir

Cet article présente principalement les informations pertinentes sur l'explication détaillée du Niveau d'isolation des transactions de la base de données MySQL . Les amis qui en ont besoin peuvent se référer au

Niveau d'isolation des transactions de la base de données .

Il existe 4 niveaux d'isolement pour les transactions de base de données, de faible à élevé :

  1. Lecture non validée : les lectures sales sont autorisées.

  2. Lecture validée : empêche les lectures incorrectes, le niveau d'isolement le plus couramment utilisé et le niveau d'isolement par défaut pour la plupart des bases de données.

  3. Lecture répétable : peut empêcher les lectures sales et les lectures non répétables.

  4. Sérialisable : il peut empêcher les lectures sales, les lectures non répétables et les lectures fantômes, ce qui (sérialisation des transactions) réduira l'efficacité de la base de données.

Ces quatre niveaux peuvent résoudre des problèmes tels que les lectures sales, les lectures non répétables et les lectures fantômes une par une.

√ : Peut se produire × : Ne se produira pas

事务级别 脏读 不可重复读 幻读
Read uncommitted
Read committed ×
Repeatable read × ×
Serializable × × ×

Remarque : Nous discutons de scénarios de niveau d'isolement, principalement dans le cas de plusieurs transactions simultanées.

Lecture sale, lecture fantôme, lecture non répétable

Lecture sale :

Lecture sale signifie lorsqu'une transaction est en cours Les données sont consultées et modifiées, mais la modification n'a pas encore été soumise à la base de données. À ce moment, une autre transaction accède également aux données et les utilise ensuite.

Lecture non répétable :

fait référence à la lecture des mêmes données plusieurs fois au cours d'une transaction. Avant la fin de cette transaction, une autre transaction accède également aux mêmes données. Ensuite, entre les deux lectures de données de la première transaction, du fait de la modification de la deuxième transaction, les données lues deux fois par la première transaction peuvent être différentes. De cette façon, les données lues deux fois au sein d’une transaction sont différentes, on parle donc de lecture non répétable. (C'est-à-dire que le même contenu de données ne peut pas être lu)

Lecture fantôme :

fait référence à un phénomène qui se produit lorsque les transactions ne sont pas exécutées de manière indépendante, comme la première transaction Les données d'une table ont été modifiées, et cette modification concerne toutes les lignes de données de la table. Parallèlement, la deuxième transaction modifie également les données de cette table. Cette modification insère une ligne de nouvelles données dans la table. Puis, à l’avenir, l’utilisateur qui effectue la première transaction constatera qu’il reste des lignes de données non modifiées dans la table, comme si une hallucination s’était produite.

exemple :

Tableau :

CREATE TABLE `cc_wsyw126_user_test_isolation_copy` (
 `id` int(11) NOT NULL AUTO_INCREMENT,
 `password` varchar(64) NOT NULL,
 `age` int(11) NOT NULL,
 PRIMARY KEY (`id`),
 KEY `ix_age` (`age`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

Données simulées :

INSERT INTO `cc_wsyw126_user_test_isolation_copy` (`password`, `age`) 
VALUES 
('1', 1),
('2', 2),
('3', 3),
('4', 4);

Première transaction A :

start transaction 
insert into cc_wsyw126_user_test_isolation_copy (password, age) values ('5',5)
commit

Deuxième transaction B :

start transaction 
update cc_wsyw126_user_test_isolation_copy set age = 2 where password >='2'
select * from cc_wsyw126_user_test_isolation_copy where password >= '2';
commit

Étapes de reproduction :

Tant que l'instruction d'insertion de la transaction A est avant la sélection de la transaction et après la mise à jour de la transaction B, .

Le moteur de stockage MySQL InnoDB implémente un protocole de contrôle de concurrence multi-versions - MVCC (Multi-Version Concurrency Control) plus stratégie de verrouillage des espaces (next -verrouillage par clé) n'a pas de lectures fantômes sous le niveau d'isolement de lecture répétable (RR). Si vous souhaitez tester la lecture fantôme, essayez-la sous MyISAM.

Dans un index clusterisé (index de clé primaire), s'il existe une contrainte d'unicité , InnoDB rétrogradera le verrou par défaut de la clé suivante en un verrou d'enregistrement.


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