我需要一点
SELECT FOR UPDATE (resp. LOCK IN SHARE MODE)的帮助.
我有一个大约有40万条记录的表,我需要在每一行上运行两个不同的处理函数.
表结构恰如其分:
data (
`id`,
`mtime`, -- When was data1 set last
`data1`,
`data2` DEFAULT NULL,
`priority1`,
`priority2`,
PRIMARY KEY `id`,
INDEX (`mtime`),
FOREIGN KEY ON `data2`
)
功能有点不同:
>第一个函数 – 必须在所有记录上循环运行(非常快),应该根据priority1选择记录;设置data1和mtime
>第二个函数 – 每个记录只需运行一次(非常慢),应根据priority2选择记录;设置data1和mtime
它们不应该同时修改同一行,但是select可能会在它们中返回一行(priority1和priority2具有不同的值)并且如果是这样的话,事务可以等待(我希望这将是它阻止的唯一情况.
我正在根据以下查询选择数据:
-- For the first function - not processed first, then the oldest,
-- the same age goes based on priority
SELECT id FROM data ORDER BY mtime IS NULL DESC, mtime, priority1