Apprentissage des connaissances de base MySQL - transaction (5)

définition

Une transaction est un ensemble d'opérations et une unité de travail indivisible. Une transaction soumet ou annule une demande d'opération au système dans son ensemble, c'est-à-dire que ces opérations réussissent en même temps (les lots d'instructions SQL sont tous exécutés), ou Les deux échouent (ou aucun ne s'exécute du tout).

Quatre caractéristiques de l'entreprise

  • Atomicité : toutes les opérations d'une transaction sont soit terminées, soit non terminées, et ne se termineront pas par un certain lien au milieu. Si une erreur se produit lors de l'exécution de la transaction, elle sera annulée (Rollback) à l'état antérieur au démarrage de la transaction, comme si la transaction n'avait jamais été exécutée.

  • Cohérence : l'intégrité de la base de données n'est pas violée avant le début de la transaction et après la fin de la transaction. Cela signifie que les données écrites doivent être entièrement conformes à toutes les règles prédéfinies, y compris l'exactitude des données, la sérialité, et la base de données ultérieure peut terminer spontanément le travail prévu.

  • Isolation : la capacité de la base de données à autoriser plusieurs transactions simultanées à lire, écrire et modifier ses données en même temps. L'isolation peut empêcher l'incohérence des données causée par l'exécution croisée lorsque plusieurs transactions sont exécutées simultanément. L'isolation des transactions est divisée en différents niveaux, y compris la lecture non validée (Read uncommitted), la lecture validée (lecture validée), la lecture répétable (lecture répétable) et la sérialisation (Serializable).

  • Persistance : Une fois le traitement de la transaction terminé, la modification des données est permanente, même si le système tombe en panne, elle ne sera pas perdue.

Deux façons d'utiliser les transactions

Afficher et définir la méthode de soumission des transactions

sélectionnez @@ validation automatique ;
définir @@autocommit=0 ;

valider la transaction

commettre;

transaction de restauration

retour en arriere

transaction ouverte

commencer la transaction ou commencer

exemple

- 数据准备
create table account(
    id int auto_increment primary key comment '主键ID',
    name varchar(10) comment '姓名',
    money int comment '余额'
) comment '账户表';
insert into account(id, name, money) VALUES (null,'张三',2000),(null,'李四',2000);

-- 恢复数据
update account set money = 2000 where name = '张三' or name = '李四';

select @@autocommit;

set @@autocommit = 0; -- 设置为手动提交

-- 转账操作 (张三给李四转账1000)
-- 1. 查询张三账户余额
select * from account where name = '张三';

-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';

程序报错.....
-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';


-- 提交事务
commit;

-- 回滚事务
rollback ;


-- 方式二
-- 转账操作 (张三给李四转账1000)
start transaction ;

-- 1. 查询张三账户余额
select * from account where name = '张三';

-- 2. 将张三账户余额-1000
update account set money = money - 1000 where name = '张三';

-- 3. 将李四账户余额+1000
update account set money = money + 1000 where name = '李四';

-- 提交事务
commit;

-- 回滚事务
rollback;
-- 查看事务隔离级别
select @@transaction_isolation;
-- 设置事务隔离级别

set session transaction isolation level read committed ;

set session transaction isolation level read uncommitted ;

set session transaction isolation level repeatable read ; -- 默认级别

set session transaction isolation level serializable ;

Je suppose que tu aimes

Origine blog.csdn.net/weixin_45496521/article/details/129028564
conseillé
Classement