INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name [(column list)] SELECT ...
INSERT ... SELECT
ステートメントでは、1
つまたは複数のテーブルの数多くのレコードを別の
1
つのテーブルにすばやく挿入することができます。
INSERT INTO tblTemp2 (fldID) SELECT tblTemp1.fldOrder_ID FROM tblTemp1 WHERE tblTemp1.fldOrder_ID > 100;
INSERT ... SELECT
ステートメントでは、以下の条件が適用されます。
MySQL 4.0.1
より前のバージョンでは、INSERT ...
SELECT
は暗黙的に IGNORE
モードで動作する。MySQL 4.0.1
以降では、重複キー違反を引き起こすレコードを無視するには、IGNORE
を明示的に指定しなければならない。
MySQL 4.0.14
より前のバージョンでは、INSERT
ステートメントの対象テーブルをクエリの
SELECT
部分の
FROM
節に示すことはできない。 この制約は
4.0.14 でなくなった。
AUTO_INCREMENT
カラムは通常どおり機能する。
C プログラムでは、C API 関数
mysql_info()
を使用してクエリに関する情報を取得できる。
See 項6.4.3. 「INSERT
構文」。
バイナリログを使用して元のテーブルを確実に再作成できるようにするため、MySQL
では、INSERT ... SELECT
実行中の同時挿入は行えない。
以前のレコードを上書きするには、INSERT
の代わりに REPLACE
を使用します。以前のレコードの値と重複するユニークキー値を持つ新しいレコードの処理に関して、REPLACE
は INSERT IGNORE
に対立する働きをします。つまり、新しいレコードが廃棄されるのではなく、新しいレコードによって以前のレコードが置き換えられます。
This is a translation of the MySQL Reference Manual that can be found at dev.mysql.com. The original Reference Manual is in English, and this translation is not necessarily as up to date as the English version.