-
未提交读(Read Uncomminted)也叫 脏读(Dirty Reader)
在事物中的修改即使没有提交,对其他事物也是可见的。事务可以读取未被提交的数据
-
提交读(Read Comminted)也叫 不可重复读(Nonrepeatable Read)
一个事务开始时,只能“看到”已经提交的事物所做的修改。一个事务从开始知道提交之前,所作的任何修改对其他事务都是不可见
-
可重复读(Repeatable Read)
当前事务只能读取到在当前事务开启之前,其他事务已提交的数据。就算是在该事物开启前,其他事务已开始但是并未提交的事务也是不可见的。可重复读隔离级别还是无法解决另外一个幻读(Phantom Read) 的问题
幻读(Phantom Read):指的是当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,会产生幻行(Phantom Row)
-
可串行化(SERIALIZABLE)
通过强制事务串行执行,避免了前面所说的幻读的问题。简单来说,SERIALIZABLE会再读取的每一行数据上都加锁,所有可能导致大量的超时和锁争用的问题
隔离级别 | 脏读可能性 | 不可重复读可能性 | 幻读可能性 | 加锁读 |
---|---|---|---|---|
READ UNCOMMITTED 未提交读 | Yes | Yes | Yes | No |
READ COMMITTED 提交读 | No | Yes | Yes | No |
REPEATABLE READ 可重复读 | No | No | Yes | No |
SERIALIZABLE 可串行化 | No | No | No | Yes |
数据库的四大特性(ACID)
-
原子性(Atomicity)
事务内包含的所有操作要么全部成功,要么全部失败回滚;
-
一致性(Consistency)
不管任何时间有少个并发的事务,系统也必须保持一致;
-
隔离性(Isolation)
多个并发的事务的操作,在同一时间只能有一个事务执行(及串行的执行);
-
持久性(Durability)
事务正确执行后,事务中对数据的操作不会回滚;