agregando-columna

agregando columna

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:

Fitorec

Me gusta la programación, me fascina el software libre, mis lenguajes preferidos son PHP, JavaScript, Python y Bash (aunque me gusta programar en casi cualquier lenguaje), en sistemas operativos me gusta GNU/Linux.

Más Entradas - Website

Sígueme:
TwitterGoogle PlusYouTubeDelicious

Sin Comentarios

Puedes ser el primero en comentar.

Deja un comentario

Por favor, introduzca su nombre. Please enter an valid email address. Por favor, introduzca un mensaje.