1. 事务
1.1. 基本特性ACID
- 原子性Atomicity
- 一致性Consistency
- 隔离性Isolation
- 持久性Durability
1.2. 隔离级别
- READ UNCOMMITTED(读未提交)
- READ COMMITTED(读已提交)
- REPEATABLE READ(可重复读)
- SERIALIZABLE(串行化)
1.2.1. 查看隔离级别
show variables like 'transaction_isolation';
-- 或者
select @@transaction_isolation;
1.2.2. 修改全局隔离级别
SET GLOBAL TRANSACTION ISOLATION LEVEL REPEATABLE READ;
1.3. 事务提交
1.3.1. 查看事务自动提交状态
SHOW VARIABLES LIKE 'autocommit';
1.3.2. 修改事务自动提交状态
SET autocommit = 0|1|ON|OFF;
1.4. 不同隔离级别的后果
- 脏读
- 不可重复读
- 幻读
隔离级别 \ 后果 |
脏读 |
不可重复读 |
幻读 |
读未提交 |
会 |
会 |
会 |
读已提交 |
不会 |
会 |
会 |
可重复读 |
不会 |
不会 |
会 |
串行化 |
会 |
会 |
会 |
2. 不同隔离级别演示
2.1. READ UNCOMMITTED
脏读:读到其他事务未提交的数据
2.1.1. 隔离级别
2.1.2. 事务一:查询account数据
事务一开启
2.1.3. 事务二:更新账户信息
事务二开启
⚠️事务二未提交
2.1.4. 事务一:查询account数据
2.1.5. 事务二:回滚事务
2.1.6. 事务一:查询account数据
2.2. READ COMMITTED
不可重复读:同一个事务中,两次读到的数据不一致
2.2.1. 隔离级别
2.2.2. 事务一:查询account数据
事务一开启
2.2.3. 事务二:更新账户信息
事务二开启
2.2.4. 事务二:提交事务
事务二提交
2.2.5. 事务一:查询account数据
事务一中两次查询到的数据不一致
2.3. REPEATABLE READ
幻读:同一个事务中,查询到没有数据却无法插入数据
2.3.1. 隔离级别
2.3.2. 事务一:查询account数据
事务一开启
2.3.3. 事务二:插入账户信息
事务二开启
事务二结束
2.3.4. 事务一:查询account数据
2.3.5. 事务一:插入账户信息
插入数据失败,查询account表中id=3的数据为空,此信息为幻读。
标签:事务,隔离,READ,account,提交,Mysql,2.1 From: https://www.cnblogs.com/spike007blogs/p/17578570.html