Mysql多插入支持多少扩展值?

时间:2012-08-10 20:35:09

标签: mysql

我们都知道在一个查询中使用多个插入比运行MULTIPLE查询更好。但是,我不知道Mysql支持多少这些多个扩展值?我在网上搜索但没有找到正确的答案。我很想知道这一点。

示例,

INSERT INTO tbl_name VALUES(1, 'John Doe'), (2, 'Peter England'), ....

我记得当我使用一些MVC框架,它试图在一个查询中触发数百/数千个插入时,我曾经得到某种错误消息,如Mysql server has gone away

2 个答案:

答案 0 :(得分:1)

您的查询的最终长度限制是由max_allowed_packet设置设置的 - 如果超过该限制,查询将被截断,几乎肯定会失效。

虽然执行多值插入更有效,但不要过度使用并尝试执行数千个值集。尝试将其拆分,这样你最多只做几百次,并且确保查询字符串的长度不会接近max_allowed_pa​​cket。

答案 1 :(得分:1)

多个插入的限制(如您所说的那个)将受数据包限制的约束。

请参阅:http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

这将影响所有查询类型,而不仅仅是插入。

要添加更多上下文,您所说的MySQL server has gone away错误将是超出数据包限制的结果。页面引用:

  

如果向服务器发送查询,也可能会收到这些错误   不正确或太大。如果mysqld收到的数据包   大的或乱序,它假设出现了问题   客户端并关闭连接。如果你需要大问题(for   例如,如果您正在使用大型BLOB列,则可以增加   通过设置服务器的 max_allowed_pa​​cket 变量来查询限制,   默认值为1MB 。你可能还需要增加   客户端的最大数据包大小。有关设置的更多信息   数据包大小在第C.5.2.10节“数据包太大”中给出。