我有一个相当基本的查询:
UPDATE the_table SET col1=[something], col2=[something else] WHERE col1 IS NULL AND col2 IS NULL LIMIT 1;
发出查询后,调用者立即执行以下操作:
SELECT col3 FROM the_table where col1=[something], col2=[something else];
不幸的是,并发调用者声称同一行。
我宁愿不做 a SELECT FOR UPDATE
,因为 [select, update, select] 将涉及到数据库的三个 RPC 而不是两个(这已经够糟糕了。)
我收集到一些 sql 方言允许UPDATE the_table WITH(UPDLOCK)
,但我的(galera/MySQL)不允许。我发现我必须经历这么多数据库点击才能执行这样一个基本概念,这令人震惊。我发现我的大部分搜索工作都在讨论支持 UPDLOCK 的方言的页面上结束。
它从这里走向何方?