隔离性与隔离级别
事务特点:ACID(Atomicity、Consistency、Isolation、Durability) 原子性/一致性/隔离性/持久性
隔离级别
-
读未提交
一个事务还没提交时,其变更就能被其他事物看到。 -
读提交
一个事务提交后,其变更就能被其他事物看到。 -
可重复读
一个事物执行过程中看到的数据,总跟这个事务在启动看到的数据一致。 -
串行化
对于同一行记录,“写”会加“写锁”,“读”会加“读锁”。当出现读写锁冲突的时候,后访问的事务必须等前一个事务执行完成,才能继续执行。
例子
-
读未提交
V1=2,V2=2, V3=2 -
读提交
V1=1, V2=2, V3=2 -
可重复读
V1=1, V2=1, V3=2 -
串行化
V1=1, V2=1, V3=2
事务 B 执行“将 1 改成 2”的时候,会被锁住。直到事务 A 提交后,事务 B 才可以继续执行
实现机制
在实现上,数据库里面会创建一个视图,访问的时候以视图的逻辑结果为准。
- RU:没有视图的概念,直接返回最小行数据。
- RC:MVCC视图在每一行SQL语句执行的时候创建。所以在RC级别下,一个事务是可以看到另外一个事务已经提交的内容。
- RR:MVCC视图实在开始事务的时候就创建好了,这个视图会一直使用,直到该事务结束。
- Serial:通过锁来实现数据访问,没有视图的概念。