Tengo curiosidad ... ¿Qué hay de malo en dejar que la alteración falle por error si la columna ya existe?
Derek Downey el
En realidad, necesito proporcionar un archivo .sql a mi cliente que tenga todas las consultas relacionadas con los cambios en la estructura de la base de datos. No puedo enviarles toda la base de datos. Solo quiero enviarles cambios db. hay muchas más consultas en ese archivo sql. Si esta consulta sobre la creación de columnas fallara, entonces fallarían todas las consultas. Por eso quiero usar la condición if para crear una columna.
zzzzz
Si su base de datos lo admite, podría usar un disparador. ANTES DE INSERTAR.
cybernard
Respuestas:
7
MySQL ALTER TABLEno tiene IF EXISTSespecificación.
Puede hacer lo siguiente mediante el uso de un proceso almacenado o un lenguaje de programación si esto es algo que deberá hacer de manera regular:
Pseudocódigo:
Encuentre si la columna existe usando el SQL a continuación:
SELECT column_name
DE INFORMATION_SCHEMA. COLUMNS
WHERE TABLE_SCHEMA= [Nombre de la base de datos] AND TABLE_NAME= [Nombre de la tabla];
Si la consulta anterior devuelve un resultado, significa que la columna existe, de lo contrario, puede continuar y crear la columna.
En MySQL / MariaDB recibo un error al usar esa consulta, indicando que column_nameno existe. Reformulé la consulta a:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
Jesus Alonso Abad
2
Para una simple respuesta 0 o 1 en MySQL y (creo) MariaDB:SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
piojo
13
Actualmente existe para Maria DB 10.219
ALTERTABLE test ADDCOLUMNIFNOTEXISTS column_a VARCHAR(255);
Bono, también funciona para MODIFICAR
ALTERTABLE test MODIFY IFEXISTS column_a VARCHAR(255);
Respuestas:
MySQL
ALTER TABLE
no tieneIF EXISTS
especificación.Puede hacer lo siguiente mediante el uso de un proceso almacenado o un lenguaje de programación si esto es algo que deberá hacer de manera regular:
Pseudocódigo:
Encuentre si la columna existe usando el SQL a continuación:
SELECT
column_name
DEINFORMATION_SCHEMA
.COLUMNS
WHERETABLE_SCHEMA
= [Nombre de la base de datos] ANDTABLE_NAME
= [Nombre de la tabla];Si la consulta anterior devuelve un resultado, significa que la columna existe, de lo contrario, puede continuar y crear la columna.
fuente
column_name
no existe. Reformulé la consulta a:SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' and column_name='[Column_name]';
SELECT COUNT(*) FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA='[Schema_name]' AND TABLE_NAME='[Table_name]' AND column_name='[Column_name]'
Actualmente existe para Maria DB 10.219
Bono, también funciona para MODIFICAR
fuente
Puede usar esta solución, ya mencionada en otra publicación de StackOverFlow: (Ref .: https://stackoverflow.com/a/31989541/ )
MySQL - ALTER TABLE para agregar una columna si no existe:
fuente
Esto a continuación funcionó para mí:
fuente