1、事务简介
事务是一组操作的集合,它是一个不可分割的事物单位,事务会把所有的操作作为一个整体一起向系统提交或撤销操作请求,即这些操作要么同时成功,要么同时失败。
2、操作演示
开始张三和李四账户表中都是2000元,现在张三给李四转1000元,并且故意制作一个异常
结果:
问题:张三的钱减少了,但是李四的钱没有增加
解决:
转账操作控制在一个事务中。
设置事务的一种方式
2.1 查看事务的方式
select @@autocommit; // 1代表自动提交,0代表手动提交
set @@autocommit = 0; // 设置事务的提交方式为手动提交
2.2 提交事务
commit;
2.3 回滚事务
rollback;
2.4 完整代码:
设置事务的另外一种方式(不手动)
2.5 开启事务
start transaction 或者 begin ;
2.6 提交事务
commit;
2.7 回滚事务
rollback;
3、四大特性ACID
4、并发事务问题
4.1 概念
a事务和b事务同时操作同一个数据库或者表的时候,所引发的问题
4.2 常见的并发事务问题
4.2.1 脏读
a事务还没有提交,b事务就读取了。
4.2.2 不可重复读
事务a1进行读取操作,读取结果value1
此时,事务b2进行commit操作,更改值
事务a3又进行了读取操作,读取结果value2
结果:value1 不等于 value2
4.2.3 幻读
一个事务a,第一次查询id=3没有数据,然后尝试进行insert数据,但是报错了(因为事务b进行了insert操作影响了事务a的读取)
总结:一次只允许一个事务提交成功。
5、并发事务演示及隔离级别(解决并发问题)
5.1 级别分类
并发和数据安全要综合考虑。read uncommited数据安全性最高。
5.2 设置隔离级别