是否取决于值集的数量?它是否依赖于INSERT语句中的字节数?
答案 0 :(得分:86)
您可以使用INSERT ... SELECT
模式插入无限大量的记录,前提是您拥有其他表中的记录或部分记录。
但是如果你使用INSERT ... VALUES
模式对值进行硬编码,那么你的语句的大小/长度是有限的:max_allowed_packet它限制了客户端发送的SQL语句的长度到数据库服务器,它会影响任何类型的查询,而不仅仅是INSERT语句。
答案 1 :(得分:34)
理想情况下,Mysql允许在单个插入(一次)中创建无限数量的行,但是当
时MySQL客户端或mysqld服务器接收的数据包大于max_allowed_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';
现在它应该可以在没有任何错误的情况下插入无限记录。感谢
答案 2 :(得分:20)
一般来说,查询受max_allowed_packet
限制。
答案 3 :(得分:8)
请参阅http://forums.mysql.com/read.php?20,161869,它与您的mysql配置相关:max_allowed_packet
,bulk_insert_buffer_size
,key_buffer_size
。
答案 4 :(得分:5)
您可以使用一个INSERT语句插入无限数量的行。例如,您可以执行一个循环执行了一千次的存储过程,每次运行INSERT查询。
或者你的INSERT可以触发一个自己执行INSERT的触发器。哪个跳过另一个触发器等等。
不,它不依赖于值集的数量。它也不依赖于字节数。
您的括号的嵌套程度有限,以及您的总声明的长度有限。具有讽刺意味的是,这两个都在thedailywtf.com上引用。但是,我上面提到的两种方法都可以达到这些限制。
答案 5 :(得分:3)
您将达到max_allowed_packet限制和
错误:1390准备好的声明包含太多占位符。
你可以在一个sql中放置65535个占位符。如果你在一行中有两列,你可以在一个sql中插入32767行。
答案 6 :(得分:1)
我相信没有定义的行数限制为每个INSERT插入,但一般来说查询可能有某种最大大小。
答案 7 :(得分:1)
受max_allowed_packet的限制。
您可以使用以下方式指定:
mysqld --max_allowed_packet=32M
默认为16M
您也可以在/ etc / mysql /