我有以下查询(不言自明):
update t
set scans = scans + 1,
is_active = if(count = scans, 0, is_active)
where id = 123
最后scans
获得更新,实际上等于count
,但is_active
仍然保持1
。
我想每当scan = count时停用条目。
答案 0 :(得分:1)
应该发生什么,according to the MySQL documentation:
如果从表中访问要在表达式中更新的列,UPDATE将使用列的当前值。例如,以下语句将col1设置为比其当前值多一个:
UPDATE t1 SET col1 = col1 + 1;
以下语句中的第二个赋值将col2设置为当前(更新的)col1值,而不是原始col1值。结果是col1和col2具有相同的值。此行为与标准SQL不同。
UPDATE t1 SET col1 = col1 + 1, col2 = col1;
单表UPDATE分配通常从左到右进行评估。对于多表更新,无法保证以任何特定顺序执行分配。