MySQL ON DUPLICATE KEY UPDATE和CONCAT

时间:2018-02-05 11:34:04

标签: mysql on-duplicate-key

我有一个查询(CodePRIMARY KEY):

INSERT INTO table (Code, ... events)
  VALUES
    (1, ... CONCAT(events, 'BAR')),
    (2, ... CONCAT(events, 'BAR')),
    ...
  ON DUPLICATE KEY
    UPDATE ... events = VALUES(events)

我的意图是,如果已经有给定键的行,则插入的events值将连接到现有值。

根据我的查询,假设events的现有值为FOO,则新的events值始终为'BAR'而不是'FOOBAR'

达到我想要的正确方法是什么?

1 个答案:

答案 0 :(得分:3)

要将新值连接到旧值,请将CONCAT调用移至UPDATE

INSERT INTO table (Code, ... events)
  VALUES
    (1, ... 'BAR'), -- insert plain values
    (2, ... 'BAR'),
    ...
  ON DUPLICATE KEY
    UPDATE ... events = CONCAT(IFNULL(events, ''), VALUES(events)) -- concat if key same

关于使用IFNULL()的一个注意事项。如果您的列events允许NULL值,则如果现有值已为NULL,则更新后的结果将再次为NULL。为了防止这种情况,我们在添加其他数据之前使用IFNULL(events, '') 初始化值。