Estoy usando un MySQL GUI para migrar algunos sitios a una nueva versión de un CMS seleccionando ciertas tablas y ejecutando la instrucción INSERT
generada desde un volcado de respaldo en una tabla vacía (el nuevo esquema). Hay algunas columnas en las tablas antiguas que no existen en la nueva, por lo que la secuencia de comandos se detiene con un error como este:¿Hay alguna forma de ignorar las columnas que no existen en INSERTAR?
línea de comandos: 1 columna Desconocido 'user_id' en 'lista de campos'
Seleccionar con precisión las columnas deseadas para exportar, o editar el archivo de volcado sería demasiado tedioso y lento. Para evitar esto, estoy creando las columnas no utilizadas a medida que se generan los errores, importando los datos ejecutando la consulta, y luego soltando las columnas que no se utilizaron cuando terminé con esa tabla. Miré INSERT IGNORE
, pero esto parece ser por ignorar llaves duplicadas (no es lo que estoy buscando).
¿Hay alguna forma de preformar un INSERT
ignorando las columnas que no existen en la tabla de destino? Estoy buscando algo "sin problemas", como algunas funcionalidades SQL existentes.
Para aclarar, estoy trabajando con varios archivos de respaldo e importando los datos a una base de datos local para probarlos antes de moverlos al servidor en vivo. Ejemplo del tipo de solución que estoy esperando:
-- Don't try to insert data from columns that don't exist in "new_table"
INSERT INTO `new_table` {IGNORE UNKNOWN COLUMNS} (`id`, `col1`, `col2`) VALUES
(1, '', ''),
(2, '', '');
Si algo como esto simplemente no existe, estoy feliz de aceptar eso como una respuesta y seguir usando mi solución actual.
Si la lista de campos menciona columnas que no existen, es posible que contenga columnas que coincidan accidentalmente. Por lo que usted sabe, puede ser que el nombre de la tabla sea incorrecto, por lo que accidentalmente inserta datos no válidos en la tabla incorrecta. Esta es una muy mala idea. Si la inserta mal, deje que falle. – GolezTrol
Hay muchas consultas que son peligrosas si se usan incorrectamente o "accidentalmente", no veo por qué esto sería una excepción. –
Claro, pero tener columnas inexistentes en la consulta sugiere un error directo y fallará. INSERT no es una excepción. Una consulta SELECT también falla. – GolezTrol