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
,这个时候需要手动给要操作的数据行加上排他锁
。