2022年5月3日 【狂神说Java】MySQL最新教程通俗易懂3 事务

6 事务

6.1 什么是事务

要么都成功, 要么都失败.

将一组SQL放在一个批次中去执行

InnoDB支持事务

事务原则 : ACID 原则

原子性, 一致性, 隔离性, 持久性

原子性Atomicity: 针对同一个事务,两者都成功或者都失败

一致性Consistency: 最终一致性, 针对一个事务, 操作前与操作后的状态一致.

持久性Durability: 事务没有提交, 恢复到原状; 事务一旦提交, 持久化到数据库. 事务一旦提交就不可逆.

隔离性 Isolation: 针对多个用户同时操作, 主要是排除其他事务对本次事务的影响.

隔离所导致的一些问题:

  • 脏读:一个事务读取了另外一个事务没有提交的数据.
    • A给B转钱200, 同时C给B转钱100. 两个事务里B的最终钱不一样了.
  • 不可重复读: 在一个事务内读取表中的某一行数据, 多次读取结果不同.
    • 一个报表 A, B. B第一次是200, 第二次读取是300, 第三次有可能又变成500
  • 虚读(幻读) : 是指在一个事务内读取了别的事务插入的数据, 导致前后读取不一致.
    • 报表有ABC三条数据, 再读的时候变成了ABCD四条数据

执行事务

mysql是默认开启事务自动提交的.

set autocommit =0; --关闭
set autocommit =1; --开启, 默认

-- 手动处理事务
set autocommit =0;-- 关闭自动提交
-- 事务开启
start transaction -- 标记一个事务的开始, 从这个之后的sql都在同一个事务里面
insert xxx
insert xxx
insert xxx

-- 提交 : 持久化(成功)
commit;

-- 回滚 : 回到原来的样子 (失败)
rollback;

-- 事务结束
set autocommit = 1;

savepoint 保存点名 -- 设置一个事务的保存点
rollback to savepoint 保存点名 -- 回滚到保存点
release savepoint 保存点名 -- 撤销指定的保留点

模拟场景

-- 模拟转账
set autocommit =0;

start TRANSACTION; -- 开启一组事务

update account SET money = money-500 where name = 'A';  -- A减少500
update account SET money = money+500 where name = 'B';	-- b增加500

commit;
ROLLBACK;
SET autocommit =1;

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值