13.2.10.1 SELECT .. 。INTOステートメント
SELECT ... INTO
形式のSELECT
は、変数に格納されるか、ファイルに書き込まれるクエリ結果:
-
SELECT ... INTO
は列の値を選択し、それらを変数に格納します。var_list
-
SELECT ... INTO OUTFILE
は選択した行をファイルに書き込みます。列と行のターミネータを指定して、特定の出力形式を生成できます。 -
SELECT ... INTO DUMPFILE
は、フォーマットせずに1行をファイルに書き込みます。
指定されたSELECT
ステートメントには、iv id = “で示されているように、最大で1つのINTO
句を含めることができます。 0db2581f17 “>
構文の説明(セクション13.2.10「SELECTステートメント」を参照)、INTO
はさまざまな位置に表示できます:
-
FROM
の前。例: -
末尾のロック句の前。例:
-
。例:
位置はMySQL8.0.20でサポートされており、推奨される位置です。ロック句の前の位置はMySQL 8.0.20で非推奨になり、サポートが削除される予定です。 afでMySQLの将来のバージョン。つまり、FROM
の後のINTO
は、SELECT
の最後ではなく警告。
INTO
句はネストされたSELECT
では使用しないでください。このようなSELECT
はその結果を外部コンテキストに返す必要があります。 UNION
ステートメント内でのINTO
の使用にも制約があります。セクション13.2.10.3「UNION句」を参照してください。
INTO
バリアントの場合:var_list
-
var_list
は、1つ以上の変数のリストに名前を付けます。各変数は、ユーザー定義変数、ストアドプロシージャ、または関数パラメーターにすることができます。 、またはストアドプログラムのローカル変数。(準備されたSELECT ... INTO
ステートメント内では、ユーザー定義変数のみが許可されます。セクション13.6.4.2「ローカル変数のスコープと解決」を参照してください。 。)var_list
-
選択した値が変数に割り当てられます。変数の数は、列の数と一致する必要があります。クエリは単一の行を返す必要があります。クエリが行を返さない場合、エラーコード1329の警告が発生し(
No data
)、変数値は変更されません。クエリが複数の行を返す場合、エラー1172が発生します(Result consisted of more than one row
)。ステートメントが複数の行を取得する可能性がある場合は、LIMIT 1
を使用して、結果セットを1行に制限できます。
INTO
もvar_list
TABLE
ステートメントで使用されますが、次の制限があります:
-
の数変数は、テーブルの列数と一致する必要があります。
-
テーブルに複数の行が含まれている場合は、
LIMIT 1
を使用して、結果セットを1行に制限する必要があります。LIMIT 1
はINTO
キーワードの前に置く必要があります。
例このようなステートメントの例を次に示します。
VALUES
ステートメントから値を選択してユーザー変数のセットへの単一行。この場合、テーブルエイリアスを使用する必要があり、値リストの各値を変数に割り当てる必要があります。ここに示されている2つのステートメントはそれぞれ、SET @x=2, @y=4, @z=8
と同等です。
ユーザー変数名では大文字と小文字は区別されません。 。セクション9.4「ユーザー定義変数」を参照してください。
SELECT
のSELECT ... INTO OUTFILE "
形式選択した行をファイルに書き込みます。ファイルはサーバーホスト上に作成されるため、この構文を使用するにはfile_name
"FILE
権限が必要です。 file_name
を既存のファイルにすることはできません。これにより、特に/etc/passwd
やデータベーステーブルなどのファイルが変更されなくなります。 character_set_filesystem
システム変数は、ファイル名の解釈を制御します。
SELECT ... INTO OUTFILE
ステートメントは、サーバーホスト上のテキストファイルにテーブルをダンプできるようにすることを目的としています。結果のファイルを他のホストで作成するには、SELECT ... INTO OUTFILE
は通常、サーバーホストファイルシステムに関連するファイルへのパスを書き込む方法がないため、適切ではありません。リモートホスト上のファイルには、サーバーホストファイルシステム上のネットワークマップパスを使用してアクセスできます。
または、MySQLクライアントソフトウェアがリモートホストにインストールされている場合は、 mysql -e "SELECT ..." >
を使用して、そのホストでファイルを生成します。 file_name
SELECT ... INTO OUTFILE
はLOAD DATA
を補完するものです。列の値は、CHARACTER SET
句で指定された文字セットに変換されて書き込まれます。そのような句が存在しない場合、値はbinary
文字セットを使用してダンプされます。実際には、文字セットの変換はありません。結果セットに複数の文字セットの列が含まれている場合、出力データファイルも同様であり、ファイルを正しく再ロードできない場合があります。
ステートメントのexport_options
部分の構文は、同じFIELDS
とivid = “70bcc09913 LOAD DATA
ステートメントで使用される “>
句。 FIELDS
句とLINES
句については、デフォルト値と許容値を含めて、13.2.7項「LOADDATAステートメント」を参照してください。 。
FIELDS ESCAPED BY
は特殊文字の書き方を制御します。FIELDS ESCAPED BY
文字が空でない場合は、次の場合に使用されます。出力で次の文字の前に付けるプレフィックスとしてのあいまいさを避けるために必要です:
-
FIELDS ESCAPED BY
文字 -
FIELDS ENCLOSED BY
文字 -
の最初の文字
FIELDS TERMINATED BY
およびLINES TERMINATED BY
の値 -
ASCII
NUL
(ゼロ値のバイト。エスケープ文字の後に実際に書き込まれるのはASCII0
であり、ゼロ値のバイトではありません)
FIELDS TERMINATED BY
、ENCLOSED BY
、ESCAPED BY
、またはLINES TERMINATED BY
文字は、ファイルを確実に読み戻すことができるようにエスケープする必要があります。 ASCII NUL
はエスケープされており、一部のポケットベルで見やすくなっています。
結果のファイルはSQL構文に準拠する必要がないため、他にエスケープする必要はありません。
FIELDS ESCAPED BY
文字が空の場合、文字はエスケープされず、NULL
は、\N
ではありません。空のエスケープ文字を指定することはおそらくお勧めできません。特に、データのフィールド値に、指定したリストの文字が含まれている場合はなおさらです。
INTO OUTFILE
は、テーブルのすべての列をにダンプする場合に、TABLE
ステートメントとともに使用することもできます。テキストファイル。この場合、行の順序と数はORDER BY
とLIMIT
を使用して制御できます。これらの句は、INTO OUTFILE
の前に置く必要があります。 TABLE ... INTO OUTFILE
はSELECT ... INTO OUTFILE
と同じexport_options
をサポートし、同じ制限が適用されますファイルシステムへの書き込み時。このようなステートメントの例を次に示します。
SELECT ... INTO OUTFILE
とVALUES
ステートメントを使用して次のように記述することもできます。値を直接ファイルに入れます。次に例を示します。
テーブルエイリアスを使用する必要があります。列エイリアスもサポートされており、オプションで、目的の列からのみ値を書き込むために使用できます。 SELECT ... INTO OUTFILE
でサポートされているエクスポートオプションのいずれかまたはすべてを使用して、出力をファイルにフォーマットすることもできます。
これは、多くのプログラムで使用されるコンマ区切り値(CSV)形式でファイルを生成する例です。
INTO DUMPFILE
INTO OUTFILE
の代わりに、MySQLは、列または行の終了やエスケープ処理を実行せずに、ファイルに1行のみを書き込みます。これは、BLOB
の値を選択してファイルに保存する場合に便利です。
INTO OUTFILE
またはは、mysqldを実行するアカウントを持つオペレーティングシステムユーザーが所有しています。 (これやその他の理由で、mysqldをroot
として実行しないでください。)MySQL 8.0.17以降、ファイル作成のumaskは0640です。ファイルの内容を操作するには、十分なアクセス権限が必要です。 MySQL 8.0.17より前は、umaskは0666であり、ファイルはサーバーホスト上のすべてのユーザーが書き込み可能です。
secure_file_priv
システム変数が空でないディレクトリ名に設定されている場合、書き込むファイルはそのディレクトリにある必要があります。
イベントスケジューラによって実行されるイベントの一部として発生するSELECT ... INTO
ステートメントのコンテキストでは、診断メッセージ(エラーだけでなく警告も)がエラーログに書き込まれます。 、および、Windowsの場合は、アプリケーションイベントログに。 詳細については、25.4.5項「イベントスケジューラのステータス」を参照してください。
MySQL 8.0.22以降、SELECT INTO OUTFILE
およびSELECT INTO DUMPFILE
は、そのバージョンで導入されたselect_into_disk_sync
サーバーシステム変数を設定することで有効になります。出力バッファーサイズとオプションの遅延は次のようになります。 それぞれselect_into_buffer_size
とselect_into_disk_sync_delay
を使用して設定します。詳細については、これらのシステム変数の説明を参照してください。