Maison > Article > base de données > Explication détaillée MySQL hautes performances des transactions et des niveaux d'isolement
Cet article comprend principalement le contenu suivant :
(1) La notion de transactions et d'ACID
(2) Niveau d'isolement des transactions
(3) Transactions dans MySQL
La compréhension des transactions est la base d'autres concepts avancés.
Comprenons les concepts d'ACID dans la base de données : atomicité, cohérence, isolation et durabilité.Transaction : une transaction est un ensemble de requêtes SQL atomiques , ou une unité d'exécution indépendante. Soit toutes réussissent, soit toutes échouent. Si elle échoue, renvoyez Roll au précédent <.>état de la transaction.
(1) Atomicité : Les opérations d'une transaction constituent une unité globale indivisible, soit toutes sont effectuées, soit aucune n'est effectuée.
-- 开始事务START TRANSACTION; -- 查询支票账户余额+ SELECT balance FROM checking WHERE customer_id = 10233276;+ -- 将支票账户减去200UPDATE checking SET balance = balance - 200.00 WHERE customer_id = 10233276; -- 将余额账户增加200UPDATE savings SET balance = balance + 200.00 WHERE customer_id = 10233276; -- 提交事务更新COMMIT;Atomicité : Soit s'engager pleinement (le solde courant de 10233276 est réduit de 200, et le le solde de l'épargne est augmenté de 200), ou annulé complètement (les soldes des deux tables ne changeront pas) Cohérence : La cohérence de cet exemple se reflète dans le fait que 200 yuans ne changeront pas car le système de base de données passe à la 3ème ligne et à la 4ème ligne. La ligne précédente s'est écrasée et a disparu car la chose n'était pas encore validée. Isolement : les relevés d'opération d'une transaction peuvent être isolés des relevés d'autres transactions. Par exemple, la transaction A s'exécute après la ligne 3 et avant la ligne 4, et la transaction B interroge le solde de contrôle à ce moment-là. , il peut toujours voir les 200 yuans qui ont été soustraits dans la transaction A (l'argent du compte reste inchangé), car les transactions A et B sont isolées l'une de l'autre. Avant la validation de la transaction A, la transaction B ne peut pas observer les modifications des données. Persistance : Ceci est facile à comprendre, c'est-à-dire que la modification est permanente une fois la transaction soumise. Les transactions, comme les verrous, nécessitent beaucoup de travail, vous pouvez donc décider si vous avez besoin d'une prise en charge des transactions et choisir différents moteurs de stockage en fonction de vos propres besoins.
Lecture non validée (lecture non validée)
À ce niveau d'isolement, toutes les transactions peuvent voir les résultats d'exécution d'autres transactions non validées. La lecture de données non validées est également appelée lecture sale. Ce niveau est rarement utilisé.Lecture validée
Il s'agit du niveau d'isolement par défaut pour la plupart des systèmes de bases de données (mais pas celui par défaut de MySQL). Cela répond à la définition simple de l'isolement : une transaction ne peut voir que les modifications apportées par les transactions validées. En d'autres termes, elle est invisible pour les autres transactions avant qu'elle ne soit validée. Ce niveau d'isolement prend également en charge la lecture non répétable, car d'autres instances de la même transaction peuvent avoir de nouvelles validations pendant le traitement de cette instance, de sorte que la même requête de sélection peut renvoyer des résultats différents.Lecture répétable (lecture répétable)
Il s'agit du niveau d'isolation des transactions par défaut de MySQL Il garantit que plusieurs instances de la même transaction peuvent. exécuter simultanément Lors de la lecture des données, vous verrez les mêmes lignes de données. Cependant, en théorie, cela entraînera un autre problème épineux : la lecture fantôme (Phantom Read). En termes simples, la lecture fantôme signifie que lorsque l'utilisateur lit une certaine plage de lignes de données, une autre transaction insère une nouvelle ligne dans la plage. Lorsque l'utilisateur lit à nouveau les lignes de données de la plage, il constatera qu'il y a de nouveaux " Fantôme ». D'ACCORD. Les moteurs de stockage InnoDB et Falcon résolvent ce problème grâce au mécanisme de contrôle de concurrence multiversion (MVCC, Multiversion Concurrency Control).
Sérialisable
Il s'agit du niveau d'isolement le plus élevé. Il force les transactions à être exécutées en série, ce qui rend impossible leur conflit les unes avec les autres. . En d’autres termes, il ajoute un verrou partagé sur chaque ligne de données lue. À ce niveau, de nombreux délais d'attente et conflits de verrouillage peuvent en résulter. Les problèmes qui peuvent survenir lors de la mise en œuvre de ces quatre secteurs d'isolation dans MySQL sont les suivants :Nous pouvons activer ou désactiver le mode de validation automatique en définissant la variable AUTOCOMMIT .
Le réglage 1 signifie activer AUTOCOMMIT, 0 signifie désactiver AUTOCOMMIT.
Cet article comprend principalement le contenu suivant :
(1) La notion de transactions et d'ACID
(2) Niveau d'isolement des transactions
(3) Transactions 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!