【发布时间】:2017-07-01 17:27:07
【问题描述】:
我有以下查询(不言自明):
update t
set scans = scans + 1,
is_active = if(count = scans, 0, is_active)
where id = 123
最后scans 得到更新,实际上等于count,但is_active 仍然保留1。
我希望每当扫描 = 计数时停用条目。
【问题讨论】:
我有以下查询(不言自明):
update t
set scans = scans + 1,
is_active = if(count = scans, 0, is_active)
where id = 123
最后scans 得到更新,实际上等于count,但is_active 仍然保留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 分配通常从左到右进行评估。对于多表更新,不能保证分配按任何特定顺序执行。
【讨论】:
scans 的值,为什么不能在if 子句中减去相同的值进行比较?