MySQL事务隔离级别
数据不一致的情况
-
脏读
A修改某行数据后,B读取,后A回滚,B再读,前后两次不一致。
-
不可重复读
A多次读取某行数据,中间B修改数据并提交,A再读,数据不一致。
-
幻读
A读取或修改了多行或整张表的数据,中间B新插入或删除一条数据,A再读取时,不一致,不同于
不可重复读,此时是由于插入或删除导致的数据集的不同。不可重复读则是由于修改数据。
事务隔离级别
| 隔离级别 | 脏读 | 不可重复读 | 幻读 | 并发性能 |
|---|---|---|---|---|
| Read-Uncommited 读未提交 | 是 | 是 | 是 | 非常高 |
| Read-Commited 读已提交 | 否 | 是 | 是 | 非常高 |
| Repeatable-Read 可重复读 | 否 | 否 | 是 | 较高 |
| Serialization 串行化 | 否 | 否 | 否 | 低 |
MySQL的事务默认隔离级别是Repeatable-Read,即可重复读,而实际使用中大多是Read-Commited,阿里云的RDS PolarDB等产中使用的隔离级别也多是Read-Commited,这个时候需要手动给要操作的数据行加上排他锁。