Estoy tratando de mover datos antiguos de:
this_table >> this_table_archive
copiando todas las columnas. He intentado esto, pero no funciona:
INSERT INTO this_table_archive (*) VALUES (SELECT * FROM this_table WHERE entry_date < '2011-01-01 00:00:00');
Nota: las tablas son idénticas y se han id
configurado como clave primaria.
mysql
select
insert-into
Kyle
fuente
fuente
Respuestas:
La sintaxis correcta se describe en el manual . Prueba esto:
Si las columnas de identificación son una columna de incremento automático y ya tiene algunos datos en ambas tablas, en algunos casos, es posible que desee omitir la identificación de la lista de columnas y generar nuevas identificaciones en su lugar para evitar insertar una identificación que ya existe en el original. mesa. Si su tabla de destino está vacía, esto no será un problema.
fuente
Para la sintaxis, se ve así (omita la lista de columnas para significar implícitamente "todos")
Para evitar errores de clave primaria si ya tiene datos en la tabla de archivo
fuente
Además de la respuesta de Mark Byers:
A veces también desea insertar detalles codificados, de lo contrario, puede haber una falla de restricción única, etc. Por lo tanto, use lo siguiente en una situación en la que anule algunos valores de las columnas.
Aquí, yo agrego valor de dominio de forma codificada para deshacerme de la restricción única.
fuente
¿No necesitas double () para el bit de valores? si no, intente esto (aunque debe haber una manera mejor
fuente
INSERT INTO .. SELECT FROM
, noINSERT INTO .. VALUES
. Característica diferente.Más ejemplos y detalles
fuente