堆栈PHP应用程序:防止MySQL的死锁在使用SELECT ... LOCK IN SHARE MODE
如果我没有理解SELECT ... LOCK IN SHARE MODE正确的,你可以把它变成一个MySQL的交易选择在该事务期间您将使用的行将从其他会话的写入/删除操作中“锁定”这些选定行(但其他会话仍可以读取行),直到事务完成,此时将锁定行SELECT SHOCK IN SHARE MODE语句被释放,所以其他会话可以访问它们进行写入/删除等。
这正是我想要的我的评论表。无论何时将评论添加到我网站上的帖子中,我需要锁定与该帖子关联的所有评论行,同时更新所有锁定行上的某些元数据。如果两个评论同时提交,我不希望他们同时访问相关的评论行,因为他们基本上会互相影响(和元数据)。所以我想将SELECT LOCK IN SHARE MODE合并到注释上传脚本中,所以在查询中运行锁定的第一个会话将完全控制注释行,直到它完成整个事务为止(而稍微慢一点的脚本必须等到来自第一个脚本的整个事务执行)。
我是一个但担心在脚本A锁定脚本B需要的数据的情况下创建死锁,而脚本B锁定了脚本A需要的数据。我如何在应用程序中解决这个问题?
此外,我只在我的网站数据库中使用innodb,所以我不需要担心表锁正确?
感谢,
Billmalarky