我想进行批量插入,类似于以下问题
How to do a batch insert in MySQL
- SQL Server对在单个插入语句中可以插入多少行有什么限制?
1.例如,当第一个值被插入,但第二个值导致主键冲突时,会发生什么情况?所有的INSERT
语句都回滚了吗?
INSERT INTO tbl_name (a,b)
VALUES (1, 2), (1, 3));
我想进行批量插入,类似于以下问题
How to do a batch insert in MySQL
INSERT
语句都回滚了吗?INSERT INTO tbl_name (a,b)
VALUES (1, 2), (1, 3));
7条答案
按热度按时间ndasle7k1#
使用
INSERT INTO ... VALUES...
时,一条语句中可插入的最大行数为1000,即但是,如果您使用SELECT语句在表中插入行,则没有任何限制,例如...
现在到了第二个问题。如果在插入过程中出现错误,会发生什么。
如果使用多值构造插入行
在上面的场景中,如果任何行插入导致错误,则整个语句将回滚,并且不会插入任何行。
但是,如果您插入的是每一行都有单独语句的行,即...
在上述情况下,每个行插入都是一个单独的语句,如果任何行插入导致错误,则只有该特定插入语句将被回滚,其余语句将被成功插入。
omvjsjqw2#
实际上,您可以使用子查询传入不限数量的记录。
ajsxfq5m3#
虽然最大值为1000,但事实证明,当数值更小时,性能就会开始下降。尤金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左右找到了一个最佳点。
yqlxgs2m4#
你可以试试这个
在查询时删除'--'
qyyhg6bp5#
有一个简短的解决方法,可以避免行数限制,并仍然将其视为一个语句(所有语句都进入,或者如果有一个错误,则所有语句都回滚)
frebpwbc6#
Dutchman的解决方案很酷,但可以简化,结果证明你不需要CTE,我试过了,它可以在没有CTE的情况下工作,如下所示:
wmvff8tz7#
这就是我如何将1000多个值添加到临时表中。