在2表联接查询中选择"FOR UPDATE“时,我有关于mysql/innodb锁定的问题。示例:
2个表- items,queue。queue.id是到items.id (外键)的1:1连接。queue.status是带索引的枚举。队列的行数非常少,而items表相对较大。
SELECT *
FROM `items`
INNER JOIN queue
ON items.id = queue.id
WHERE queue.status = 'new'
FOR UPDATE;items中选定的行会被独占锁定吗?queue表中的所有行外,还有任何可能导致死锁的共享锁。我在某个地方读到了将下一个密钥共享锁插入自动增量索引,然后使用SELECT ... FOR UPDATE (在同一事务中)将锁升级为独占时,很容易发生死锁--2个线程可以获得共享锁,然后它们都会等待对方释放锁,以获得排他锁。在这种情况下(也听说外键可以创建共享锁)是否可能。发布于 2012-06-09 09:35:40
是的,每一行(*)都将被锁定。你真的不需要担心死锁。创建它需要相当多的时间,当它发生时,主要是客户的错误。
https://stackoverflow.com/questions/9058779
复制相似问题