文章目录
1、什么是事务
学习并发事务之前,需要理解什么是事务:
事务四大特性(ACID):
2、并发事务所遇到的问题
2.1、脏读
事务B查询DB时,读取到事务A修改修改后的数据,但是事务A并没有提交事务
2.2、不可重复读
事务A读取DB后得到数据,然后事务B把数据修改后提交,最终事务A再次读取数据发现数据发生了变化!
2.3、幻读
当我们已经解决不可重复读问题后,事务A查询数据,发现并没有数据,紧接着事务B插入一条数据,事务A由于没查到数据,就要插入数据,结果由于主键冲突而失败,因为事务B已经插入数据了,最终事务A再次查询结果还是查询不到(解释:本来事务A就不该读到事务B插入的结果,如果能读到那就是2.2不可重复读问题了)
为了解决并发事务所引发的问题,在数据库中引入了事务隔离级别。
3、事务隔离级别
隔离级别自上而下级别越来越高,性能越来越低,隔离级别分别是:
- 读未提交
- 读已提交
- 可重复读(默认)
- 串行化
隔离级别常见操作:
# 查看事务隔离级别
SELECT @@TRANSACTION_ISOLATION;
# 设置事务隔离级别 SESSION:当前会话
SET [ SESSION | GLOBAL ] TRANSACTION ISOLATION LEVEL { READ UNCOMMITTED | READ COMMITTED | REPEATABLE READ | SERIALIZABLE }
设置好对应的隔离级别就不会出现并发事务带来的各种问题!