READ COMMITTED隔离级别使用什么锁类型?

时间:2014-07-27 17:44:48

标签: database transactions isolation-level

我发现维基百科文章中存在矛盾,不确定错误在哪里(或者我可能无法正确理解)。

根据Read committed isolation level中的Wikipedia

"在此隔离级别中,基于锁的并发控制DBMS 实现保持写锁(在选定数据上获取),直到 事务结束,但读锁定尽快释放 执行SELECT操作(因此不可重复读取现象 可以发生在这种隔离级别,如下所述)"

进一步解释在{read committed isolation level>中可能发生的Non-repeatable reads phenomena

交易1:

SELECT * FROM users WHERE id = 1;

交易2:

UPDATE users SET age = 21 WHERE id = 1; COMMIT;

交易1:

SELECT * FROM users WHERE id = 1; COMMIT;

根据第一个引用,应该在第一个事务中的第一个select语句之后获取一个写锁定。为什么第二个事务可以成功获取写锁定并提交,如果这个锁定类型应该是独占的? DBMS是否真的对所选数据保持写锁定?

1 个答案:

答案 0 :(得分:3)

维基百科在两个方面是错误的:

  1. 这是一个实现细节。 RDBMS不必这样做。通过使用快照隔离,可以在没有锁读取的情况下实现READ COMMITTED。
  2. 没有RDBMS我知道获取读取的写锁。那句话含糊不清。