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

时间:2010-08-21 03:07:09

标签: mysql multiple-insert

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

8 个答案:

答案 0 :(得分:86)

您可以使用INSERT ... SELECT模式插入无限大量的记录,前提是您拥有其他表中的记录或部分记录。

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

答案 1 :(得分:34)

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

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';

现在它应该可以在没有任何错误的情况下插入无限记录。感谢

答案 2 :(得分:20)

一般来说,查询受max_allowed_packet限制。

答案 3 :(得分:8)

请参阅http://forums.mysql.com/read.php?20,161869,它与您的mysql配置相关:max_allowed_packetbulk_insert_buffer_sizekey_buffer_size

答案 4 :(得分:5)

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

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

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

您的括号的嵌套程度有限,以及您的总声明的长度有限。具有讽刺意味的是,这两个都在thedailywtf.com上引用。但是,我上面提到的两种方法都可以达到这些限制。

答案 5 :(得分:3)

您将达到max_allowed_pa​​cket限制和

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

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

Import of 50K+ Records in MySQL Gives General error: 1390 Prepared statement contains too many placeholders

答案 6 :(得分:1)

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

答案 7 :(得分:1)

受max_allowed_pa​​cket的限制。
您可以使用以下方式指定:     mysqld --max_allowed_packet=32M 默认为16M 您也可以在/ etc / mysql /

中的my.cnf中指定