【发布时间】:2018-12-13 14:28:20
【问题描述】:
我使用 MemSql 作为我的数据库,我需要有SELECT ... FOR UPDATE 功能。但是,我正在使用的 6.5 版本不支持它。这个问题有解决办法吗?
我的问题如下:多个进程从同一个表中选择一条记录(尚未处理),从 SQL 代码中执行一些工作,然后执行 UPDATE 以将记录标记为已处理。如果我有可能做SELECT ... FOR UPDATE,那么我可以锁定记录以确保只有一个进程可以选择它。
我能想到的一种解决方法是使用一些 LockToken 列并执行类似
的操作UPDATE Tbl SET LockToken = 'a_unique_token' WHERE LockToken IS NULL LIMIT 1;
SELECT * FROM Tbl WHERE LockToken = 'a_unique_token';
但在这种情况下我得到了
错误代码:1749。MemSQL Distributed 不支持功能“UPDATE...LIMIT 必须限制在单个分区”。
我也可以使用 LOCK TABLES 完成这项工作,但根据 this 的说法,它们也不支持。
这类问题有解决办法吗?
【问题讨论】:
标签: select locking singlestore