MySQL 关于重复密钥更新和 CONCAT
MySQL ON DUPLICATE KEY UPDATE and CONCAT
我有一个问题(Code
是PRIMARY 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'
。
实现我想要的正确方法是什么?
要将新值连接到旧值,请将 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, '')
初始化 值。
我有一个问题(Code
是PRIMARY 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'
。
实现我想要的正确方法是什么?
要将新值连接到旧值,请将 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, '')
初始化 值。