为什么是这样的桌子:
create table tbl (
id int not null auto_increment,
key1 int not null,
key2 int not null,
value0 double,
value1 double,
key(id),
unique(key1,key2)
);
以下查询未存储prev。在更新现有记录时,“value 0”到“value 1”的值?有可能吗?
insert into tbl (key1, key2, value0, value1)
values (...), (...)
, ...
, (...)
on duplicate key update value0=values(value0), value1=if(value0<>values(value0),value0, value1);
最佳答案
UPDATE按顺序更新值(在UPDATE和DUPLICATE UPDATE语句中)。
这意味着,如果在update语句中引用一个在同一语句中更新的值,则将获得更新的值,而不是原始值。
因为在声明中
on duplicate key update value0=values(value0), value1=if(value0<>values(value0),value0, value1);
value0始终等于values(value0)-它在update语句的前一部分中进行了更新。要使其按预期工作,您必须切换语句的位置:
on duplicate key update value1=if(value0<>values(value0),value0, value1), value0=values(value0);
关于mysql - mysql,如何使“插入重复 key 更新”存储在前面。值(value)观?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7160398/