首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >可插入单个insert状态的Server最大行数

问可插入单个insert状态的Server最大行数
EN

Stack Overflow用户
提问于 2016-05-26 22:05:54
回答 7查看 76.8K关注 0票数 30

我想做一个批量插入,类似于这个问题。

How to do a batch insert in MySQL

  1. Server在单个insert语句中可以插入多少行的限制是什么?
  2. 例如,当插入第一个值但第二个值导致主键冲突时,会发生什么情况。所有INSERT语句是否回滚?
代码语言:javascript
复制
INSERT INTO tbl_name (a,b) 
VALUES (1, 2), (1, 3));
EN

回答 7

Stack Overflow用户

回答已采纳

发布于 2016-05-26 22:26:34

当使用INSERT INTO ... VALUES...时,可以在一条语句中插入的最大行数为1000。

代码语言:javascript
复制
INSERT INTO TableName( Colum1)
VALUES (1),
       (2),
       (3),...... upto 1000 rows. 

但是,如果使用SELECT语句在表中插入行,则没有限制,例如.

代码语言:javascript
复制
INSERT INTO TableName (ColName)
Select Col FROM AnotherTable

接下来是你的第二个问题。当插入过程中发生错误时会发生什么。

如果要使用多值构造插入行,那么

代码语言:javascript
复制
INSERT INTO TableName( Colum1)
VALUES (1),
       (2),
       (3)

在上述场景中,如果任何行插入导致错误,则整个语句将被回滚,并且不会插入任何行。

但是,如果要为每一行插入带有单独语句的行,即.

代码语言:javascript
复制
INSERT INTO TableName( Colum1) VALUES (1)
INSERT INTO TableName( Colum1) VALUES (2)
INSERT INTO TableName( Colum1) VALUES (3)

在上述情况下,每一行插入都是一个单独的语句,如果任何行插入导致错误,则只回滚特定的insert语句,则将成功插入其余的语句。

票数 49
EN

Stack Overflow用户

发布于 2019-09-17 00:09:57

实际上,您可以使用子查询传递无限数量的记录。

代码语言:javascript
复制
;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
票数 10
EN

Stack Overflow用户

发布于 2019-01-31 14:15:50

虽然最大值是1000,但已经证明,性能在小得多的数字下开始下降。Eugene Philipov写了一篇很棒的文章,探讨了这个主题:

https://www.red-gate.com/simple-talk/sql/performance/comparing-multiple-rows-insert-vs-single-row-insert-with-three-data-load-methods/

总之,作者做了一些精心设计的实验,并在25附近找到了一个亮点。YMMV

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37471803

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档