13.2.4.1. INSERT ... SELECT
Syntax
INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE]
[INTO] tbl_name
[(col_name
,...)]
SELECT ...
[ ON DUPLICATE KEY UPDATE col_name
=expr
, ... ]
With INSERT ... SELECT
, you can quickly
insert many rows into a table from one or many tables. For
example:
INSERT INTO tbl_temp2 (fld_id)
SELECT tbl_temp1.fld_order_id
FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
The following conditions hold for a INSERT ...
SELECT
statements:
Specify IGNORE
to ignore rows that
would cause duplicate-key violations.
DELAYED
is ignored with INSERT
... SELECT
.
The target table of the INSERT
statement may appear in the FROM
clause
of the SELECT
part of the query. (This
was not possible in some older versions of MySQL.)
AUTO_INCREMENT
columns work as usual.
To ensure that the binary log can be used to re-create the
original tables, MySQL does not allow concurrent inserts
for INSERT ... SELECT
statements.
Currently, you cannot insert into a table and select from
the same table in a subquery.
In the values part of ON DUPLICATE KEY
UPDATE
, you can refer to columns in other tables, as
long as you do not use GROUP BY
in the
SELECT
part. One side effect is that you
must qualify non-unique column names in the values part.