MySQL :: MySQL8.0リファレンスマニュアル:: 13.2.10.1 SELECT … INTOステートメント

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 var_list ステートメント内では、ユーザー定義変数のみが許可されます。セクション13.6.4.2「ローカル変数のスコープと解決」を参照してください。 。)

  • 選択した値が変数に割り当てられます。変数の数は、列の数と一致する必要があります。クエリは単一の行を返す必要があります。クエリが行を返さない場合、エラーコード1329の警告が発生し(No data)、変数値は変更されません。クエリが複数の行を返す場合、エラー1172が発生します(Result consisted of more than one row)。ステートメントが複数の行を取得する可能性がある場合は、LIMIT 1を使用して、結果セットを1行に制限できます。

INTO var_list TABLEステートメントで使用されますが、次の制限があります:

  • の数変数は、テーブルの列数と一致する必要があります。

  • テーブルに複数の行が含まれている場合は、LIMIT 1を使用して、結果セットを1行に制限する必要があります。 LIMIT 1INTOキーワードの前に置く必要があります。

例このようなステートメントの例を次に示します。

VALUESステートメントから値を選択してユーザー変数のセットへの単一行。この場合、テーブルエイリアスを使用する必要があり、値リストの各値を変数に割り当てる必要があります。ここに示されている2つのステートメントはそれぞれ、SET @x=2, @y=4, @z=8と同等です。

ユーザー変数名では大文字と小文字は区別されません。 。セクション9.4「ユーザー定義変数」を参照してください。

SELECTSELECT ... 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 OUTFILELOAD 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(ゼロ値のバイト。エスケープ文字の後に実際に書き込まれるのはASCII 0であり、ゼロ値のバイトではありません)

FIELDS TERMINATED BYENCLOSED BYESCAPED BY 、またはLINES TERMINATED BY文字は、ファイルを確実に読み戻すことができるようにエスケープする必要があります。 ASCII NULはエスケープされており、一部のポケットベルで見やすくなっています。

結果のファイルはSQL構文に準拠する必要がないため、他にエスケープする必要はありません。

FIELDS ESCAPED BY文字が空の場合、文字はエスケープされず、NULLは、\Nではありません。空のエスケープ文字を指定することはおそらくお勧めできません。特に、データのフィールド値に、指定したリストの文字が含まれている場合はなおさらです。

INTO OUTFILEは、テーブルのすべての列をにダンプする場合に、TABLEステートメントとともに使用することもできます。テキストファイル。この場合、行の順序と数はORDER BYLIMITを使用して制御できます。これらの句は、INTO OUTFILEの前に置く必要があります。 TABLE ... INTO OUTFILESELECT ... INTO OUTFILEと同じexport_optionsをサポートし、同じ制限が適用されますファイルシステムへの書き込み時。このようなステートメントの例を次に示します。

SELECT ... INTO OUTFILEVALUESステートメントを使用して次のように記述することもできます。値を直接ファイルに入れます。次に例を示します。

テーブルエイリアスを使用する必要があります。列エイリアスもサポートされており、オプションで、目的の列からのみ値を書き込むために使用できます。 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_sizeselect_into_disk_sync_delayを使用して設定します。詳細については、これらのシステム変数の説明を参照してください。

Write a Comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です