INSERT INTO .. ON DUPLICATE KEY UPDATE for multiple items

前端 未结 3 703
Happy的楠姐
Happy的楠姐 2020-12-07 10:33

I want to do something like this

INSERT INTO t (t.a, t.b, t.c) 
VALUES (\'key1\',\'key2\',\'value\') 
ON DUPLICATE KEY UPDATE 
t.c = \'value\';
INSERT INTO          


        
相关标签:
3条回答
  • 2020-12-07 10:58

    After MySQL 8.0.19, you can use as keyword, for example:

    INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new
      ON DUPLICATE KEY UPDATE c = new.a+new.b;
    

    or

    INSERT INTO t1 (a,b,c) VALUES (1,2,3),(4,5,6) AS new(m,n,p)
      ON DUPLICATE KEY UPDATE c = m+n;
    

    ref: https://dev.mysql.com/doc/refman/8.0/en/insert-on-duplicate.html

    0 讨论(0)
  • 2020-12-07 11:12

    Too low on rep for comment, but I wanted to add a slightly more complex syntax that was inspired by @ʞɔıu response. To update multiple fields on duplicate key:

    INSERT INTO t (t.a, t.b, t.c, t.d)
    VALUES ('key1','key2','value','valueb'), ('key1','key3','value2','value2b')
    ON DUPLICATE KEY UPDATE
    t.c = VALUES(t.c),
    t.d = VALUES(t.d)
    

    Hope that helps someone out there looking to perform bulk insert with multiple on duplicate key update. The syntax escaped me.

    0 讨论(0)
  • 2020-12-07 11:14

    Use the VALUES() function

    INSERT INTO t (t.a, t.b, t.c)
    VALUES ('key1','key2','value'), ('key1','key3','value2')
    ON DUPLICATE KEY UPDATE
    t.c = VALUES(t.c)
    

    see http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html

    0 讨论(0)
提交回复
热议问题