(一)事务 A 发生了,其它事务一个都别想发生。
(二)事务 A 发生了,可以再有其它事务并行发生,但是事务 A 涉及到的记录,其它事务不许读也不许写。
(三)事务 A 发生了,可以再有其它事务并行发生,但是事务 A 涉及到的记录,其它事务不许写,但可以读。
(四)事务 A 发生了,可以再有其它事务并行发生,但是事务 A 涉及到的记录,其它事务可以写,也可以读。
第一显然是 强制串行化 serializable
第四显然是 读未提交 read uncommited
不过第二第三,我就不太确定。第二对应 读已提交 read commited,第三对应 可重复读 repeatable read ?
因为读已提交和可重复读这两个概念真的让我头大无比,我觉得从我这样的角度去想更清晰明了不是么?
谢谢。
1.不要用模糊的模棱两可的语言去描述一个经过比较严格的定义的概念,事务的隔离级别只给出了不同事务读写(把创建和删除理解为广义上的写操作,或者说这里的读写代表了未修改/修改了访问数据源的状态)应该达到的要求,而没有限制达到要求使用的技术,MVCC多版本并发控制也可以实现其中的某些隔离级别,可它并没有向你理解的那样限制读或者写。
2.四种隔离级别都必须满足的条件是不能脏写,即使是读未提交(读未提交的问题是脏读),但你的理解第四个显然会导致脏写。
3.可串行化隔离级别并不意味着必须完全串行调度。
请看《数据库系统概念》第六版