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

这取决于值集的数量吗? 它取决于INSERT语句中的字节数?

您可以使用INSERT ... SELECT模式插入无限多的logging,前提是您在其他表中包含这些logging或其中的一部分。

但是,如果使用INSERT ... VALUES模式对这些值进行硬编码,那么声明的大小有多大: max_allowed_pa​​cket限制客户端向数据库服务器发送的SQL语句的长度,影响任何types的查询,而不仅仅是INSERT语句。

查询通常受到max_allowed_packet限制。

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

MySQL客户端或mysqld服务器收到大于max_allowed_pa​​cket字节的数据包,则会发出数据包太大错误并closures连接。

要查看max_allowed_pa​​cketvariables的默认值是什么,请在MySQL中执行以下命令:

show variables like 'max_allowed_packet';

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

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

SET GLOBAL max_allowed_packet=524288000;

用新的连接检查你的新terminal的变化:

show variables like 'max_allowed_packet';

现在它应该没有任何错误的插入无限的logging。 谢谢

参考http://forums.mysql.com/read.php?20161869 ,它与你的mysql的configuration有关: max_allowed_packetbulk_insert_buffer_sizebulk_insert_buffer_size

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

或者你的INSERT可能会触发一个本身执行INSERT的触发器。 哪个旅行另一个触发。 等等。

不,它不取决于数值集的数量。 也不取决于字节数。

括号内的嵌套深度是有限制的,并且限制了总体陈述的时间长度。 具有讽刺意味的是,这些都在dailywtf.com上被引用。 但是,我上面提到的两种手段都绕过了这些限制。

它受到max_allowed_pa​​cket的限制。
您可以使用以下命令来指定: mysqld --max_allowed_packet=32M它默认为16M。
你也可以在my.cnf中指定/ etc / mysql /

您将达到max_allowed_pa​​cket限制和

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

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

在MySQL中导入50K +logging给出一般错误:1390准备好的语句包含太多的占位符

我相信没有定义的行数限制每个INSERT插入,但是可能会有一些最大的查询大小。

Interesting Posts