INSERT [LOW_PRIORITY | HIGH_PRIORITY] [IGNORE] [INTO]tbl_name
[(col_name
,...)] SELECT ... [ ON DUPLICATE KEY UPDATEcol_name
=expr
, ... ]
Con INSERT ... SELECT
, puede insertar
rápidamente varios registros en un atabla desde una o varias
tablas.
Por ejemplo:
INSERT INTO tbl_temp2 (fld_id) SELECT tbl_temp1.fld_order_id FROM tbl_temp1 WHERE tbl_temp1.fld_order_id > 100;
La siguiente condición sirve para un comando INSERT
... SELECT
:
En MySQL 5.0, especifique IGNORE
explícitamente para ignorar registros que causarían
violaciones de clave duplicada.
No use DELAYED
con INSERT ...
SELECT
.
En MySQL 5.0, la tabla objetivo del comando
INSERT
puede aparecer en la cláusula
FROM
de la parte
SELECT
de la consulta. (Esto no era
posible en algunas versiones antiguas de MySQL.)
Las columnas AUTO_INCREMENT
funcionan
normalmente.
Para asegurar que el log binario puede usarse para recrear
las tablas originales, MySQL no permite inserciones
concurrentes durante INSERT ... SELECT
.
Actualmente, no puede insertar en una tabla y seleccionar de la misma tabla en una subconsulta.
En las partes de valores de ON DUPLICATE KEY
UPDATE
puede referirse a una columna en otras
tablas, mientras no use GROUP BY
en la
parte SELECT
. Un efecto lateral es que
debe calificar los nombres de columna no únicos en la parte
de valores.
Puede usar REPLACE
en lugar de
INSERT
para sobreescribir registros
antiguos REPLACE
es la contraparte de
INSERT IGNORE
en el tratamiento de nuevos
registros que contienen valores de clave única que duplican
registros antiguos: Los nuevos registros se usan para
reemplazar los antiguos registros en lugar de descartarlos.
Ésta es una traducción del manual de referencia de MySQL, que puede encontrarse en dev.mysql.com. El manual de referencia original de MySQL está escrito en inglés, y esta traducción no necesariamente está tan actualizada como la versión original. Para cualquier sugerencia sobre la traducción y para señalar errores de cualquier tipo, no dude en dirigirse a mysql-es@vespito.com.