【发布时间】:2014-09-18 23:04:11
【问题描述】:
我在一篇 Wikipedia 文章中发现了一个矛盾之处,并且不确定错误在哪里(或者我可能没有正确理解)。
根据读取提交隔离级别中的Wikipedia:
"在这个隔离级别,一个基于锁的并发控制DBMS 实现保持写锁(在选定数据上获取),直到 事务结束,但读锁在事务结束后立即释放 执行SELECT操作(所以出现不可重复读现象 可以在此隔离级别发生,如下所述)"
进一步解释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 真的对选定的数据保持写锁吗?
【问题讨论】:
标签: database transactions isolation-level