Maison >base de données >tutoriel mysql >Explication détaillée des transactions dans MySQL

Explication détaillée des transactions dans MySQL

黄舟
黄舟original
2017-09-11 11:39:061407parcourir

Transaction MySQL :

1. Instruction de contrôle des transactions MySQL

(1) Ouvrir la transaction

begin;

(2). >

(3). Annulez la transaction
commit;

(4). Définissez si la transaction est automatiquement validée
rollback;

Par exemple :
set autocommit = {0 | 1}; // 0不自动提交,1自动提交

.

Il s'agit d'une simple transaction pour insérer des données
begin;// 开启事务
insert into table_name values(内容);
commit;// 提交事务

Il s'agit d'une simple transaction d'annulation pour insérer des données
begin;// 开启事务
insert into table_name values(内容);// 后悔了,不想插入数据了
rollback;// 回滚,取消这次的事务操作

2 Déclaration d'isolation de transaction MySQL

Voir MySQL. Niveau d'isolement

(1).read-uncommit (lire le contenu non validé)
show variables like 'tx_isolation';

Lecture sale (problèmes causés);

Un utilisateur deux fois Le contenu de la requête les résultats sont différents.

Définissez le niveau d'isolement par défaut (vous devez vous reconnecter une fois le réglage terminé) :

Deux utilisateurs se connectent à la base de données en même temps et démarrer les transactions respectivement.La transaction effectue des opérations d'ajout, de suppression et de modification, et la transaction d'un autre utilisateur n'effectue que des opérations de requête, la première termine l'opération sans la valider, et la seconde peut voir les résultats de l'opération, cependant, si la première annule la transaction. à ce moment, cette dernière ne verra pas des résultats différents de la dernière fois (c'est-à-dire le résultat d'aucune opération). C'est le problème de lecture sale
set global transaction isolation level read uncommitted;

(2).read commit (read). le contenu soumis)

Les transactions ne peuvent voir que les modifications apportées par les transactions validées, et la même requête peut renvoyer des résultats différents. Ce niveau provoque des problèmes de lecture non reproductibles.

Définissez le niveau d'isolement par défaut (. vous devez vous reconnecter une fois le réglage terminé) ):

Dans une transaction, j'ai vu deux résultats de requête différents (similaires à une lecture sale).
set global transaction isolation level read committed;

(3). lecture répétable(lecture répétable)

Il peut garantir que plusieurs instances de la même transaction verront les mêmes lignes de données lors de la lecture simultanée des données (niveau d'isolement Mornar de la base de données).

Définir la valeur par défaut niveau d'isolement (paramètre terminé. Vous devez ensuite vous reconnecter) :

C'est-à-dire que dans une transaction, peu importe la façon dont un autre utilisateur modifie les données, les résultats demandés dans cette transaction sont toujours les mêmes .
set global transaction isolation level repeatable read;

***Soumission implicite de transaction*** :

3. Mécanisme de verrouillage InnoDB
alter table users engine = innodb;// 会造成事务的隐式提交

(1) Sans aucune clé primaire ni index dans une table. , une transaction sera verrouillée. Tous les enregistrements de cette table ne peuvent pas être exploités par d'autres transactions.

(2).S'il y a une clé primaire ou un index dans une table, une transaction verrouillera une certaine ligne de données dans la table qu'elle exploite, et ne verrouillera pas la table entière si d'autres transactions opèrent sur d'autres données. dans ce tableau, cette fois Non affecté. Il convient de noter que le verrouillage au niveau de la ligne est ici un verrouillage d'espacement, c'est-à-dire si vous modifiez certaines lignes de données, par exemple en modifiant n lignes de données avec id<10.=. , alors, id = 11 Les données seront également verrouillées, ce qui doit être noté.

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