我有插入记录的场景,如果遇到重复的主键,我想更新记录。 现在,我有一个X列,它不是主键的一部分。我想让我的记录得到更新,如果X的值与现有的不同,那就是更新。
现在,即使X相同,我的记录也会更新。如果某些列不同,我怎样才能编写查询以实现重复更新? 当前查询是
INSERT INTO table (a, b, c, d, X) values (10, 11, 12, 13, 153.0 ) ON DUPLICATE KEY UPDATE parameter_value = NEWX , timestamp = CURRENT_TIMESTAMP()
在其中,[a,b,c,d]是我的主键,X是值。 我还希望时间戳保持相同,如果X相同,并且如果X被更改则时间戳改变
答案 0 :(得分:0)
首先,如果您想使用on duplicate key update
,那么您需要一个合适的唯一索引。我不确定这只是X
,还是全部是四列。创建唯一索引很简单,例如:
create unique index idx_table_x on table(x);
或 在表(a,b,c,d,x)上创建唯一索引idx_table_a_b_c_d_x;
然后我认为这句话会做你想要的:
INSERT INTO table(a, b, c, d, X, timestamp)
values (10, 11, 12, 13, 153.0, CURRENT_TIMESTAMP())
ON DUPLICATE KEY UPDATE a = values(a);
它将忽略值相同的记录。
答案 1 :(得分:0)
以下是我需要的查询
INSERT INTO fitness_data(a,b,c,d,X)VALUES(10,11,12,13',XNEW) ON DUPLICATE KEY UPDATE timestamp = IF(X!= VALUES(X),CURRENT_TIMESTAMP,timestamp), X = XNEW
因此,如果X!= XNEW,则时间戳只会更新,不会更新