在键上插入多个更新那些多个

insert multiple on key update those multiple

这是一个常见的话题,但我找不到答案... 我必须插入或更新 1000 条记录,我想做的是这个

INSERT INTO contacts
(contacts.tipo_contacto, 
contacts.date_entered, 
contacts.date_modified,
contacts.created_by, 
contacts.id)
VALUES ('INSERTED',now(), now(), 'MYSQL', '55ae1a2715c9a'), 
('INSERTED', now(), now(), 'MYSQL', '55ae1a2718a47') 
ON DUPLICATE KEY UPDATE 
tipo_contacto='UPDATED', 
date_modified=now(), 
created_by='mysql' , 
tipo_contacto='UPDATED', 
date_modified=now(), 
created_by='mysql2'

两个键的更新应该引用不同的键,他们更新了其中的两个,问题是他们用最后一个值更新了它,所以两个记录都得到 created_by='mysql2'
如何将值更改为不同的键? 提前致谢!

您可以在 on duplicate key update 中输入一个表达式:

INSERT INTO contacts(tipo_contacto, date_entered, date_modified, created_by, id) 
    VALUES ('INSERTED', now(), now(), 'MYSQL', '55ae1a2715c9a'), 
           ('INSERTED', now(), now(), 'MYSQL', '55ae1a2718a47') 
    ON DUPLICATE KEY UPDATE 
        tipo_contacto = 'UPDATED',
        date_modified = now(),
        created_by = (case when VALUES(id) = '55ae1a2715c9a' then 'mysql' else 'mysql2' end);

注意:您没有为 insert.

限定列列表中的列名称

ON DUPLICATE KEY UPDATE 子句中,您可以使用 VALUES(column_name) 来引用如果没有重复项将被插入的值。

INSERT INTO contacts 
    (contacts.tipo_contacto, contacts.date_entered, contacts.date_modified, contacts.created_by, contacts.id) 
VALUES
    ('INSERTED', now(), now(), 'MYSQL', '55ae1a2715c9a'), 
    ('INSERTED', now(), now(), 'MYSQL', '55ae1a2718a47') 
ON DUPLICATE KEY UPDATE 
    tipo_contacto=VALUES(tipo_contacto), date_modified=VALUES(date_modified), created_by=VALUES(created_by)