在密钥上插入多个更新那些多个

时间:2015-07-21 11:30:46

标签: mysql insert duplicates

这是一个常见话题,但我找不到答案...... 我必须插入或更新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'

两个密钥更新应该引用不同的密钥并且他们更新其中两个问题是他们用最后一个值更新它所以两个记录都被创建_by ='mysql2'
如何将值更改为不同的键? 提前谢谢!

2 个答案:

答案 0 :(得分:1)

您可以在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的列列表中限定列名称。

答案 1 :(得分:0)

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)