Alterar una tabla si existe un campo en MySQL
En ocasiones es necesario alterar una tabla en MYSQL, las cosas se complican si queremos hacerlo sólo en caso que exista determinado campo, pues MYSQL no tiene una sintaxis como un ALTER TABLE IF [CONDITION..]
(o similar), en este caso tendremos que revisar previamente en la base de datos de meta-información (information_schema
), lo siguiente es un procedimiento que realiza esta tarea:
Procedimiento SQL que altera una tabla:
DROP PROCEDURE IF EXISTS agregar_campo_nuevo; DELIMITER $$ CREATE DEFINER=CURRENT_USER PROCEDURE agregar_campo_nuevo ( ) BEGIN SELECT @columna_nombre:= COLUMN_NAME FROM information_schema.columns WHERE TABLE_SCHEMA = 'nombre_bd' AND TABLE_NAME = 'nombre_tabla' AND COLUMN_NAME = 'nombre_columna'; SELECT @columna_nombre; IF @columna_nombre is null THEN ALTER TABLE `nombre_tabla` ADD `nombre_columna` TINYINT UNSIGNED NULL AFTER `id` ; END IF; END$$ DELIMITER ; CALL agregar_campo_nuevo; DROP PROCEDURE agregar_campo_nuevo;
Descripción:
El código anterior agrega un procedimiento agregar_campo_nuevo
que posteriormente es ejecutado y borrado, este procedimiento revisamos si existe el campo con nombre nombre_columna
dentro de la tabla nombre_tabla
que a su vez esta contenida dentro de la base de datos nombre_bd
, si no campo existe entonces el resultado de la búsqueda es NULL
y por lo tanto podemos agregar la el nuevo campo(nombre_columna
).
Por otra parte podríamos hacer otra cosa en caso que el campo si existe, para esto solo tenemos que alterar el IF
, como se muestra a continuación:
IF @columna_nombre IS NOT NULL THEN -- hacer otra cosa END IF;
Fuentes:
- http://stackoverflow.com/questions/8219714/check-if-column-exists-before-alter-table-mysql
- http://stackoverflow.com/questions/972922/add-column-to-mysql-table-if-it-does-not-exist
Dejar un comentario
¿Quieres unirte a la conversación?Siéntete libre de contribuir!