2012-08-10 27 views
0

我們都知道,在ONE查詢中使用多個插入比運行MULTIPLE查詢更好。但是,我不知道Mysql支持多少這些多個擴展值?我在網上搜索,但沒有找到正確的答案。我只是很想知道這一點。Mysql多重插入支持多少擴展值?

例,

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

我記得當我使用一些MVC框架,它試圖發射數百/千刀片在一個查詢中,我曾經得到某種像Mysql server has gone away錯誤信息。

回答

1

多個插入的限制,就像你正在談論的那個限制一樣,將受到數據包限制的限制。

請參見:http://dev.mysql.com/doc/refman/5.1/en/packet-too-large.html

這會影響所有的查詢類型,並不僅僅是插入。

要添加更多的上下文,您提到的錯誤MySQL server has gone away將是超出數據包限制的結果。來自頁面的報價:

如果向 不正確或太大的服務器發送查詢,也可以得到這些錯誤。如果mysqld收到的數據包也是,也就是 大或無序,它會假定客戶端發生了問題並關閉連接。如果你需要較大查詢( 例如,如果您正在使用大的BLOB列),你可以通過設置服務器的max_allowed_pa​​cket 變量, 其中有1MB一個默認值增加 查詢的限制。您可能還需要增加客戶端上的最大數據包大小 。有關設置 數據包大小的更多信息在第C.5.2.10節「數據包太大」中給出。

1

您的查詢的最終長度限制由max_allowed_packet設置設置 - 如果超過該限制,查詢將被截斷並幾乎肯定會變爲無效。

雖然做一個多值插入更有效率,但不要過分,並嘗試做成千上萬的值集。嘗試分割它,所以你最多隻能做幾百個,並且確保查詢字符串的長度不會接近max_allowed_pa​​cket。