为什么是这样的桌子:

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/

10-11 10:53