2012-03-12 62 views
3

这是否行得通? (我没有获得一个MySQL服务器来测试> <。)INSERT INTO值(...)具有多个值的重复键更新

MYTABLE:
身份识别码:整数/主键
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!"; 
+0

关键是什么? ID是主键?如果是这样,你可以在查询中得到重复吗? ON DUPLICATE KEY仅适用于唯一值或组合键 – Odinn 2012-03-12 15:00:30

+0

是“myid”是主键。只是假设表中已经有一些行了 – Sharky 2012-03-12 15:07:29

回答

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

+0

谢谢你的回答Michael! (我会尽快接受) – Sharky 2012-03-12 15:00:51

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); 
+0

谢谢你的回答和文件Eder先生! (虽然迈克尔有点快)) – Sharky 2012-03-12 15:01:26

0

是的。但是,如果你运行的是真正的大型SQL语句 - 小心点击最大SQL大小(默认为1Mb,我认为),当点击这个长度时,你可能会开始得到一些奇怪的mysql错误

+0

是的,这是正确的。如果我没有记错,它是max_packet_size或max_allowed_pa​​cket ... – Sharky 2012-03-12 15:05:23