提供数据列表到" ON DUPLICATE KEY UPDATE"

时间:2017-09-22 22:26:26

标签: mysql sql

我有一系列我希望插入表格的数据。该表具有唯一键code,如果该键已经存在,我想更新该记录。我认为使用INSERT INTO ON DUPLICATE KEY UPDATE语句

可以实现这一点
INSERT INTO codes (code, delta) 
VALUES ... 
ON DUPLICATE KEY UPDATE
delta=new_delta

上述语法的问题是new_delta是数组中每个单元格的不同属性。是否可以在此语法中提供每个new_delta的列表,并为每个new_delta选择相关的code?或者还有另一种方法可以解决这个问题吗?

1 个答案:

答案 0 :(得分:0)

除非我误解,否则它会变得非常复杂。

这是正常形式:

INSERT INTO codes (code, delta) 
   VALUES (code1, delta1),
          (code2, delta2), 
           ....
ON DUPLICATE KEY UPDATE
    delta = VALUES(delta)

这里,如果code1和code2都存在,第一个将更新为delta1,第二个将更新为delta2;因为那些是名为delta的列的VALUES()

但在我看来,你想要一个不同的三角洲?所以你在数据库中有(code1,delta1),你插入(code1,delta2),如果code1已经存在,delta值应该设置为delta3?

在这种情况下,你可以这样做:

ON DUPLICATE KEY UPDATE
    delta = CASE code
        WHEN code1 THEN delta3
        WHEN code2 THEN delta5
        ...
        END

或者您可以使用相同类型的delta向数据库dupdelta添加新列。现在你插入这个元组:

 (code3, delta3, delta4)

含义:如果code3不存在,则要将其delta设置为delta3。但如果它已经存在,那么你希望它的delta代替delta4。

您只需指定

即可
ON DUPLICATE KEY UPDATE delta=VALUES(dupdelta)

当然现在这个表有一个名为dupdelta的额外无用的列。您可能想要创建一个VIEW来隐藏它。