INSERT ... SELECT
INSERT [LOW_PRIORITY] [IGNORE] [INTO] tbl_name [(column_list)]
SELECT ...
Con INSERT ... SELECT, se pueden insertar rápidamente muchas filas en una tabla desde otra u
otras 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;
En una sentencia INSERT ... SELECT se deben cumplir las siguientes condiciones :
- En versiones anteriores a MySQL 4.0.1, INSERT ... SELECT opera de forma implícita en el modo
IGNORE. A partir de MySQL 4.0.1, se debe especificar IGNORE explícitamente para que se
ignoren registros que puedas producir violaciones de claves duplicadas.
- No se debe usar DELAYED con INSERT ... SELECT.
- Antes de MySQL 4.0.14, la tabla destino de una sentencia INSERT no puede aparecer en la
cláusula FROM de la parte SELECT de la consulta. Esta limitación se eliminó en la
versión 4.0.14.
- Las columnas AUTO_INCREMENT funcionan del modo normal.
- Para asegurar que el diario binario pueda ser usado para recrear las tablas originales, MySQL no
permitirá inserciones concurrentes durante un INSERT ... SELECT.
- Actualmente, no se puede insertar en una tabla y seleccionar desde la misma tabla en una
subconsulta.
Se puede usar en lugar de INSERT para sobrescribir filas viejas.
es el homólogo de INSERT IGNORE en el tratamiento de nuevas filas que
contengan valores de clave úniccas que dupliquen filas existentes: Las nuevas filas se usan para
reemplazar a las antiguas más que para que sean descartadas.