我听说过页面和行级别的锁,但从未听说过用于会话和连接的锁。今天,我们的(MySQL) DBA讨论了行锁,并暗示它们的作用域可以在连接或会话级别上设置。这是真的,还是我误解了他?
我没有意识到,当连接建立(或会话启动时)时可以设置锁,然后在连接/会话结束时释放锁。如果这是真的,这对行/页级别的锁有什么好处?提前谢谢。
发布于 2013-03-08 21:46:01
在某种程度上,是的。
当涉及到InnoDB时,可以选择哪些行可以被锁定。它与其说是DB连接的特定设置,不如说是DB连接的特定设置。这是在进行更新之前必须调用的一个特定查询。
SELECT ... FOR UPDATESELECT ... LOCK IN SHARE MODE这可以根据这些选择的结果集启动独占或共享行锁。
您可以在MySQL文档中找到有关这方面的更多信息。
我以前写过关于使用以下内容的文章:
Aug 08, 2011:InnoDB死锁是否仅用于插入/更新/删除?Jan 02, 2012:锁定共享模式Mar 18, 2012:选择“更新”使索引列出现错误May 09, 2012:更新行时事务锁定超时May 13, 2012:无法更新innodb表中的某些行.Aug 10, 2012;MySQL中的相似函数NOWAIT关于会话和连接
SELECT ... FOR UPDATE将启动要更新的行的锁,并且仍然允许读取其他DB连接。SELECT ... LOCK IN SHARE MODE本质上执行反向SELECT ... FOR UPDATE或直接DML在使用这些SELECT查询时,我看到的唯一优点是防止页面上不必要的死锁。
希望这能帮上忙!
https://dba.stackexchange.com/questions/36283
复制相似问题