97

値セットの数に依存しますか? INSERT ステートメントのバイト数に依存しますか?

4

8 に答える 8

97

INSERT ... SELECT他のテーブルにそれらのレコードまたはその一部がある場合、パターンを使用して無限に多数のレコードを挿入できます。

ただし、パターンを使用して値をハードコーディングしている場合INSERT ... VALUES、ステートメントの大きさ/長さに制限があります: max_allowed_pa​​cketは、クライアントからデータベース サーバーに送信される SQL ステートメントの長さを制限し、あらゆるタイプのクエリに影響します。 INSERT ステートメントだけではありません。

于 2010-08-21T03:22:02.663 に答える
50

理想的には、Mysql は 1 回の挿入で (一度に) 無制限の数の行を作成できるようにしますが、

MySQL クライアントまたは mysqld サーバーが max_allowed_pa​​cket バイトを超えるパケットを受信すると、Packet too large エラーを発行して接続を閉じます。

max_allowed_pa​​cket 変数のデフォルト値を表示するには、MySQL で次のコマンドを実行します。

show variables like 'max_allowed_packet';

標準の MySQL インストールのデフォルト値は 1048576 バイト (1MB) です。これは、セッションまたは接続に対してより高い値に設定することで増やすことができます。

これは、すべてのユーザーに対して値を 500MB に設定します (これが GLOBAL の意味です)。

SET GLOBAL max_allowed_packet=524288000;

新しい接続を使用して新しい端末で変更を確認します。

show variables like 'max_allowed_packet';

これで、無限レコードの挿入でエラーが発生することなく動作するはずです。ありがとう

于 2015-01-09T06:53:48.980 に答える
24

クエリはmax_allowed_packet一般的に制限されます。

于 2012-05-21T12:26:46.983 に答える
9

http://forums.mysql.com/read.php?20,161869を参照してください。これは、mysql の構成に関連しています: max_allowed_packet, bulk_insert_buffer_size, key_buffer_size.

于 2013-06-08T09:19:14.380 に答える
6

1 つの INSERT ステートメントで無限の数の行を挿入できます。たとえば、INSERT クエリを実行するたびに、ループが 1000 回実行されるストアド プロシージャを実行できます。

または、INSERT 自体が INSERT を実行するトリガーをトリガーする可能性があります。別のトリガーをトリップします。等々。

いいえ、値セットの数には依存しません。また、バイト数にも依存しません。

括弧のネストの深さには制限があり、ステートメント全体の長さにも制限があります。皮肉なことに、これらは両方とも thedailywtf.com で参照されています。ただし、上記の両方の手段でこれらの制限を回避できます。

于 2010-08-21T03:14:04.860 に答える
3

INSERT ごとに挿入できる定義された行数はないと思いますが、一般的にクエリには何らかの最大サイズがあるかもしれません。

于 2010-08-21T03:13:23.150 に答える
2

max_allowed_pa​​cket によって制限されます。
以下を使用して指定できます mysqld --max_allowed_packet=32M 。デフォルトでは 16M です。
/etc/mysql/ の my.cnf で指定することもできます

于 2013-03-27T05:52:10.583 に答える