我们都知道,在一个查询中使用多个插入比运行多个查询要好。但是,我不知道Mysql最多支持多少个这样的多重扩展值?我在网上搜索,但没有找到正确的答案。我只是很好奇想知道这个。
例如,
INSERT INTO tbl_name VALUES(1, 'John Doe'), (2, 'Peter England'), ....
我记得当我使用一些MVC框架的时候,它试图在一个查询中触发成百上千的插入,我经常得到像Mysql server has gone away这样的错误消息。
发布于 2012-08-11 04:38:37
多个插入的限制,就像您正在讨论的那样,将受到数据包限制的约束。
请参阅:http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html
这将影响所有查询类型,而不仅仅是insert。
更详细地说,您提到的MySQL server has gone away错误可能是由于超过数据包限制而导致的。该页面中的一句话:
如果向服务器发送的查询不正确或太大,也会出现这些错误。如果mysqld收到的数据包太大或顺序错误,它就会认为客户端出了问题,并关闭连接。如果需要大型查询(例如,如果您正在处理大型BLOB列),可以通过设置服务器的max_allowed_packet变量来增加查询限制,该变量的缺省值为1MB。您可能还需要增加客户端的最大数据包大小。有关设置数据包大小的更多信息,请参阅C.5.2.10节,“数据包太大”。
发布于 2012-08-11 04:38:28
查询的最终长度限制是由max_allowed_packet设置设置的-如果超过这个限制,查询就会被截断,并且几乎肯定会变得无效。
虽然执行多值插入更有效,但不要做过多的尝试,尝试执行数千个值集。尝试将其拆分,以便最多只能处理几百个,并且一定要确保查询字符串的长度不会接近max_allowed_packet。
https://stackoverflow.com/questions/11908880
复制相似问题