时间点 | 事务A | 事务B |
---|---|---|
1 | 开启事务A | |
2 | 开启事务B | |
3 | 查询余额为100 | |
4 | 修改余额为150 | |
5 | 查询余额为150 | |
6 | 事务回滚 |
时间点 | 事务A | 事务B |
---|---|---|
1 | 开启事务A | |
2 | 开启事务B | |
3 | 查询余额为100 | |
4 | 修改余额为150 | |
5 | 查询余额为100 | |
6 | 提交事务 | |
7 | 查询余额为150 |
时间点 | 事务A | 事务B |
---|---|---|
1 | 开启事务A | |
2 | 开启事务B | |
3 | 查询id<3的所有记录,共3条 | |
4 | 插入一条记录id=2 | |
5 | 提交事务 | |
6 | 查询id<3的所有记录,共4条 |
隔离级别 | 脏读 | 不可重复读 | 幻读 |
---|---|---|---|
READ UNCOMMITTED | √ | √ | √ |
READ COMMITTED | × | √ | √ |
REPEATABLE READ | × | × | √ |
SERIALIZABLE | × | × | × |
√代表会出现问题,×代表不会出现问题
SERIALIZABLE级别会将整个表都锁住,严重影响并发执行效率,所以一般工作中不使用,使用最多的是REPEATABLE READ
设置事务隔离级别代码
-- 查看默认的事务隔离级别 MySQL默认的是repeatable read
select @@transaction_isolation;
-- 设置事务的隔离级别 (设置当前会话的隔离级别)
set session transaction isolation level read uncommitted;
set session transaction isolation level read committed;
set session transaction isolation level repeatable read;
set session transaction isolation level serializable;
原文:https://www.cnblogs.com/shanlei/p/14333083.html