【发布时间】:2011-08-29 07:14:13
【问题描述】:
这不是一个完整/正确的 MySQL 查询伪代码:
Select *
from Notifications as n
where n.date > (CurrentDate-10 days)
limit by 1
FOR UPDATE
http://dev.mysql.com/doc/refman/5.0/en/select.html 声明: 如果将 FOR UPDATE 与使用页锁或行锁的存储引擎一起使用,则查询检查的行将被写锁定,直到当前事务结束
这里是只有返回的一条记录被 MySQL 锁定还是它必须扫描所有记录才能找到单个记录?
【问题讨论】:
-
锁定
all Records it has to SCAN TO FIND the SINGLE RECORD会非常愚蠢,我真的怀疑 MySQL 是这样工作的。想想 MySQL 搜索引擎中的算法——当它看到某行并知道这不是您需要的行时,为什么还要花额外的时间来设置锁?!我建议您不接受答案,以便其他 MySQL 人员对此发表评论 -
另外,作为 Oracle DB 开发人员,我向您保证,Oracle 只会锁定满足
WHERE条件的行。因此,这在技术上是可行的,我不认为 MySQL 那个 很多逊色 -
虽然看起来我的答案最终是正确的,但我建议您选择另一个答案,因为它是正确的并且实际上已经测试过它,而我的只是指正如 Alexander 指出的那样,文档可以通过多种方式阅读。