我有一个相当基本的查询:
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];
不幸的是,并发调用者正在声明同一行。
我宁愿不执行SELECT FOR UPDATE
,因为[选择、更新、选择]将涉及到数据库的三个rpc,而不是两个(这已经够糟糕了。)
我发现某些sql方言允许使用(UPDLOCK)更新the_table
,但我的(galera/MySQL)不允许。我发现令人震惊的是,我必须经过这么多的数据库点击才能执行这样一个基本概念。我发现我的大部分搜索工作都在讨论支持 UPDLOCK 的方言的页面上结束。
它从这里到哪里去?
最佳答案
您有autocommit=1
吗?
如果没有事务完整性,其他一些连接可能会在执行 SELECT
之前插入并更改行。
请注意,可能有多个 NULL 行,因此 UPDATE
可能会更改许多行。
您在UPDATE
之后检查过“受影响的行”吗?也许没有更改任何行。
关于mysql - 为什么 "update foo ... where bar is null"让多个调用者声明同一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32000906/