它取决于值集的数量吗?它是否取决于INSERT语句中的字节数?
Answers:
您可以使用INSERT ... SELECT
pattern插入无数记录,前提是您在其他表中有这些记录或部分记录。
但是,如果您使用INSERT ... VALUES
模式对值进行硬编码,则语句的大小/长度是有限制的:max_allowed_packet限制了客户端发送到数据库服务器的SQL语句的长度,并且会影响任何类型的查询不仅适用于INSERT语句。
理想情况下,Mysql允许在一次插入中一次创建无限数量的行,但是当
MySQL客户端或mysqld服务器接收到一个大于max_allowed_packet字节的数据包,它发出Packet太大错误并关闭连接。
要查看max_allowed_packet变量的默认值是什么,请在MySQL中执行以下命令:
show variables like 'max_allowed_packet';
标准MySQL安装的默认值为1048576字节(1MB)。可以通过将其设置为会话或连接的较高值来增加此值。
这会将每个人的值设置为500MB(这就是GLOBAL的意思):
SET GLOBAL max_allowed_packet=524288000;
使用新的连接检查新终端中的更改:
show variables like 'max_allowed_packet';
现在,它可以无限制地插入无限记录。谢谢
strlen($query_with_questionmarks) < $max_alloweed_packet
吗,直到?
查询通常受限制max_allowed_packet
。
指 http://forums.mysql.com/read.php?20,161869,它与你的mysql的配置有关:max_allowed_packet
,bulk_insert_buffer_size
,key_buffer_size
。
您可以使用一条INSERT语句插入无数行。例如,您可以执行一个存储过程,该存储过程的循环执行一千次,每次运行INSERT查询。
否则,您的INSERT可能会触发本身执行INSERT的触发器。哪个触发另一个触发器。等等。
不,它不取决于值集的数量。它也不取决于字节数。
括号的嵌套深度是有限制的,而总语句的长度是有限制的。具有讽刺意味的是,这两个引用都在thedailywtf.com上引用。但是,我上面提到的两种方法都可以绕过这些限制。
您将达到max_allowed_packet限制,
错误:1390预处理语句包含太多占位符。
您可以在一个sql中放置65535个占位符。因此,如果一行中有两列,则可以在一个sql中插入32767行。