MySQL ON DUPLICATE KEY UPDATE 和 CONCAT

Пав*_*рин 2 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)
Run Code Online (Sandbox Code Playgroud)

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

对于我的查询,假设eventsis的现有值FOO,新events值总是'BAR'而不是'FOOBAR'

实现我想要的正确方法是什么?

Boh*_*ian 7

要将新值连接到旧值,请将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
Run Code Online (Sandbox Code Playgroud)

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