我有一系列我希望插入表格的数据。该表具有唯一键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
?或者还有另一种方法可以解决这个问题吗?
答案 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来隐藏它。