【问题标题】:MySql on duplicate record UPDATE issueMySql关于重复记录更新问题
【发布时间】:2014-07-21 09:34:24
【问题描述】:

我有一个插入记录的场景,如果遇到重复的主键,我想更新记录。 现在,我有一列 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 改变,时间戳也会改变

【问题讨论】:

  • 另外,我不想在主键中包含 X
  • 您的问题不清楚。您说“即使 X 相同,我的记录也在更新”。然而,这就是on duplicate key update 的原因。
  • 抱歉混淆,当我说记录正在更新时,我的意思是时间戳列正在改变,X 保持不变,如果 X 相同,我也希望时间戳保持不变,如果 X 是,时间戳改变改变了

标签: mysql sql


【解决方案1】:

首先,如果你想使用on duplicate key update,那么你需要一个合适的唯一索引。我不确定这是否只是X,还是全部是四列。创建唯一索引很容易,例如:

create unique index idx_table_x on table(x);

或 在 table(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);

它将忽略值相同的记录。

【讨论】:

  • 抱歉混淆,当我说记录正在更新时,我的意思是时间戳列正在改变,X 保持不变,如果 X 相同,我也希望时间戳保持不变,如果 X 是,时间戳改变改变了
  • 您想何时插入新记录?这就是insert 的用途。
  • 我发布了答案,触发也是一种方式,但想避免它
【解决方案2】:

以下是我需要的查询

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 = X新

所以时间戳只有在 X!=XNEW 时才会更新,否则不会更新

【讨论】:

    猜你喜欢
    • 2013-07-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-26
    • 2021-06-22
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多