【发布时间】:2010-07-25 04:18:31
【问题描述】:
我有两个从 mysql 表中提取的工作。他们都想获得一行,对其进行一些工作并使用结果更新该行,但是我不希望他们选择同一行进行更新。使用 mysql/innodb 引擎在选择中锁定一行的最佳方法是什么,以便其他线程无法使用它但允许它们选择其他记录?这可能吗?
谢谢!
【问题讨论】:
标签: mysql locking queue innodb
我有两个从 mysql 表中提取的工作。他们都想获得一行,对其进行一些工作并使用结果更新该行,但是我不希望他们选择同一行进行更新。使用 mysql/innodb 引擎在选择中锁定一行的最佳方法是什么,以便其他线程无法使用它但允许它们选择其他记录?这可能吗?
谢谢!
【问题讨论】:
标签: mysql locking queue innodb
您可以将“FOR UPDATE”修饰符添加到您的选择语句的末尾。即
SELECT * FROM table WHERE pkey = N FOR UPDATE;
.. 但我认为在使用 InnoDB 作为队列并以性能为目标时应该小心。队列是面向堆栈的,需要不同的工具来解决 InnoDB(和 MySQL)试图解决的问题。
【讨论】: