我想做一个批量插入,类似于这个问题。
How to do a batch insert in MySQL
INSERT语句是否回滚?INSERT INTO tbl_name (a,b)
VALUES (1, 2), (1, 3));发布于 2016-05-26 22:26:34
当使用INSERT INTO ... VALUES...时,可以在一条语句中插入的最大行数为1000。
INSERT INTO TableName( Colum1)
VALUES (1),
(2),
(3),...... upto 1000 rows. 但是,如果使用SELECT语句在表中插入行,则没有限制,例如.
INSERT INTO TableName (ColName)
Select Col FROM AnotherTable接下来是你的第二个问题。当插入过程中发生错误时会发生什么。
如果要使用多值构造插入行,那么
INSERT INTO TableName( Colum1)
VALUES (1),
(2),
(3)在上述场景中,如果任何行插入导致错误,则整个语句将被回滚,并且不会插入任何行。
但是,如果要为每一行插入带有单独语句的行,即.
INSERT INTO TableName( Colum1) VALUES (1)
INSERT INTO TableName( Colum1) VALUES (2)
INSERT INTO TableName( Colum1) VALUES (3)在上述情况下,每一行插入都是一个单独的语句,如果任何行插入导致错误,则只回滚特定的insert语句,则将成功插入其余的语句。
发布于 2019-09-17 00:09:57
实际上,您可以使用子查询传递无限数量的记录。
;WITH NewData AS (SELECT * FROM ( VALUES (1, 'A'),(2,'B'),(3,'C')) x (Id, SomeName))
INSERT INTO TableName (Column1, Column2) SELECT Id, SomeName FROM NewData发布于 2019-01-31 14:15:50
虽然最大值是1000,但已经证明,性能在小得多的数字下开始下降。Eugene Philipov写了一篇很棒的文章,探讨了这个主题:
总之,作者做了一些精心设计的实验,并在25附近找到了一个亮点。YMMV
https://stackoverflow.com/questions/37471803
复制相似问题