MySQL - 我可以在一个INSERT语句中插入多少行?

Lui*_*r15 81 mysql multiple-insert

它取决于值集的数量吗?它是否依赖于INSERT语句中的字节数?

Luk*_*man 88

如果您INSERT ... SELECT在其他表中拥有这些记录或部分记录,则可以使用模式插入无限大量的记录.

但是如果你使用INSERT ... VALUES模式对值进行硬编码,则对语句的大小/长度有一个限制:max_allowed_pa​​cket限制客户端发送到数据库服务器的SQL语句的长度,它会影响任何类型的查询而且不仅仅是INSERT语句.


Raj*_*ula 37

理想情况下,Mysql允许在单个插入(一次)中创建无限数量的行,但是当a

MySQL客户端或mysqld服务器接收的数据包大于max_allowed_pa​​cket字节,它会发出数据包太大的错误并关闭连接.

要查看max_allowed_pa​​cket变量的默认值,请在MySQL中执行以下命令:

show variables like 'max_allowed_packet';

标准MySQL安装的默认值为1048576字节(1MB).可以通过将其设置为会话或连接的更高值来增加此值.

这为每个人设置了500MB的值(这就是GLOBAL的含义):

SET GLOBAL max_allowed_packet=524288000;

使用新连接检查新终端的更改:

show variables like 'max_allowed_packet';

现在它应该没有任何错误插入无限记录.谢谢

  • 500 MB不是无限的.它比默认值大得多,但仍然不是无限的. (7认同)

小智 21

查询受到max_allowed_packet一般限制.


bro*_*man 10

您将达到 max_allowed_pa​​cket 限制并且

错误:1390 准备好的语句包含太多占位符。

您可以在一个sql中放置65535个占位符。因此,如果您在一行中有两列,则可以在一个sql中插入32767行。

在 MySQL 中导入 50K+ 记录给出一般错误:1390 Prepared statement contains too many placeholders


cla*_* yu 8

参考http://forums.mysql.com/read.php?20,161869,它与你的mysql的配置有关:max_allowed_packet,bulk_insert_buffer_size,key_buffer_size.


Bor*_*lid 5

您可以使用一个INSERT语句插入无限数量的行.例如,您可以执行一个存储过程,该存储过程执行一次循环,每次运行INSERT查询.

或者你的INSERT可以触发一个自己执行INSERT的触发器.哪个跳过另一个触发器 等等.

不,它不依赖于值集的数量.它也不依赖于字节数.

括号的嵌套程度有限,限制了总括号的长度.具有讽刺意味的是,这两个都在thedailywtf.com上引用.但是,我上面提到的两种方法都能绕过这些限制.

  • 是的,但是您的第一个示例显示了在循环中运行查询,每个循环运行一个INSERT语句,并且它没有说明插入多行的INSERT语句.这只是一个重点问题. (2认同)

DMa*_*ags 3

我相信每次 INSERT 插入的行数没有定义,但一般来说查询可能有某种最大大小。