事务
1.理解
完成某个功能的整个过程 称为一个事务。
同生共死:整个过程中如果出现一点错误,整个事务失败。整个过程都成功 整个事务成功
如:转账
1000 1000
张三 -- 》 李四
500 1500
0 2000
2.特性
1.原子性 整个事务不可分割
2. 一致性 整个事务过程中数据保持一致的
3. 持久性 数据持久化保存
4.隔离性:事务与事务之间的隔离关系
隔离级别:低 --- 高
1. 读未提交 read uncommitted
引发问题:脏读 模拟发工资
解决:提升隔离级别
2. 读已提交 read committed
引发问题:不能读重复数据
解决:提升隔离级别
3. 可重复读 repeatable read mysql默认的隔离级别是 repeatable read
引发问题:幻读
解决:提升隔离级别
4. 串行化 serializable 这个级别比较浪费资源,效率比较低,项目中一般不用
3.实现事务的过程
3. 实现事务的过程(MySQL数据库默认一个sql语句是一个事务)
1.查看当前数据库事务的提交方式
SHOW VARIABLES LIKE 'autocommit';
2.将事务的提交方式设置手动
SET autocommit = 0;
3.手动开启事务
START TRANSACTION;
4.编写事务流程
5.如果没有问题,成功,执行提交
COMMIT;
6.失败回滚
rollback;
4.隔离性演示
4-1 读未提交
引发问题:脏读 模拟发工资
解决:提升隔离级别
员工再次查询,查看结果
查看当前会话的隔离机制 select @@tx_isolation;
修改当前会话的隔离机制 set session transaction isolation level read uncommitted;
A窗口
# A 事务
select @@tx_isolation;
set session transaction isolation level read uncommitted; #把隔离修改为第一级别 读未提交
set session transaction isolation level read committed; #把隔离修改为第二级别 读已提交
#设置自动提交为 off
set autocommit = 0;
#手动打开事务
start transaction;
#给张三发工资
update account set money = money + 10000 where name = '张三';
select * from account;
commit;
rollback;
B窗口
#B 事务
select @@tx_isolation;
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed; #把隔离修改为第二级别 读已提交
#设置自动提交为 off
set autocommit = 0;
#手动打开事务
start transaction;
select * from account;
rollback;