Пав*_*рин 2 mysql on-duplicate-key
我有一个查询(Code是PRIMARY 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'。
实现我想要的正确方法是什么?
要将新值连接到旧值,请将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, '')。