这取决于值集的数量吗?这取决于插入语句中的字节数吗?
您可以使用INSERT ... SELECT
模式插入无限数量的记录,前提是您在其他表中拥有这些记录或其中的一部分。
但是,如果您使用INSERT ... VALUES
模式硬编码值,则语句长度存在限制:max_allowed_packet,它限制了客户端发送到数据库服务器的SQL语句长度,并且它影响任何类型的查询,而不仅仅是INSERT语句。
show variables like 'max_allowed_packet';
标准的MySQL安装具有1048576字节(1MB)的默认值。可以通过为会话或连接设置更高的值来增加它。SET GLOBAL max_allowed_packet=524288000;
在新连接中的新终端中检查更改:
show variables like 'max_allowed_packet';
现在应该可以无限制地插入记录而没有任何错误。谢谢一般来说,查询受 max_allowed_packet
的限制。
你将会达到max_allowed_packet的限制并出现错误: 1390 预处理语句包含太多占位符。
在一个SQL语句中可插入65535个占位符。因此,如果一行中有两个列,在一个SQL中可以插入32767行。
max_allowed_packet
, bulk_insert_buffer_size
, key_buffer_size
。建议您调整这些参数以提高性能。这受到 max_allowed_packet 的限制。
您可以通过以下方式进行指定:
mysqld --max_allowed_packet=32M
默认情况下为 16M。
您也可以在 /etc/mysql/ 下的 my.cnf 文件中指定。
我相信在每个INSERT中你可以插入的行数没有固定的限制,但是总的查询大小可能会有某种最大限制。
strlen($query_with_questionmarks) < $max_alloweed_packet
,我能保证安全吗? - pilat