使用多个值INSERT INTO值(...)ON DUPLICATE KEY UPDATE

时间:2012-03-12 14:51:47

标签: mysql insert

这会有用吗? (我没有可用于测试>。<)

的mysql服务器

MYTABLE:
myid:整数/主键
mydata:文字

INSERT INTO mytable VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row"), [.....more and more coma-separated parentheses with values], (1000,"guess what? yes new row") ON DUPLICATE KEY UPDATE mydata = "dang, this row already exists!";

3 个答案:

答案 0 :(得分:4)

是的,它会起作用,但建议首先明确命名列:

INSERT INTO mytable
  (myid, mydata)
   VALUES (1,"new row"),(2,"brand new row"),(3,"yup another new row")

此外,单引号在语法上更具可移植性,但MySQL会正确处理它们。

   VALUES (1,'new row'),(2,'brand new row'),(3,'yup another new row')

注意,如果您已在mytable中使用了值,则可能会遇到id的主键冲突。您需要决定在该情况下应采取的措施,并相应地应用ON DUPLICATE KEY

答案 1 :(得分:2)

我不明白为什么不:

INSERT [LOW_PRIORITY | DELAYED | HIGH_PRIORITY] [IGNORE]
    [INTO] tbl_name [(col_name,...)]
    {VALUES | VALUE} ({expr | DEFAULT},...),(...),...
    [ ON DUPLICATE KEY UPDATE
      col_name=expr
        [, col_name=expr] ... ]
来自http://dev.mysql.com/doc/refman/5.5/en/insert.html

。甚至有一个例子here

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

答案 2 :(得分:0)

是的。但是,如果您运行的是非常大的SQL语句 - 请注意达到最大SQL大小(我认为默认值为1Mb),在达到此长度时可能会出现一些奇怪的mysql错误