Foro de elhacker.net

Programación => Bases de Datos => Mensaje iniciado por: OssoH en 4 Marzo 2011, 10:47 am



Título: MYSQL. Crear un campo en una table si no existe
Publicado por: OssoH en 4 Marzo 2011, 10:47 am
Hola,
Quiero crear un nuevo campo en un tabla siempre que no exista previsamente evitando de esta forma el error que daría por campo existente.

Se que podría hacerlo con un sencillo PHP pero me gustaría tenerlo en forma de sentencias SQL a lanzar desde el phpmyadmin.

He probado con :

Código:
IF NOT EXISTS (SELECT active FROM ps_marcas)
BEGIN
   ALTER TABLE ps_marcas ADD active tinyint(1) unsigned NOT NULL DEFAULT '1'
END

y el error que me devuelve es:

#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'IF NOT EXISTS (SELECT * FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = `ps_' at line 1

Alguien sabe que puede estar pasando?
Gracias.


Título: Re: MYSQL. Crear un campo en una table si no existe
Publicado por: Novlucker en 4 Marzo 2011, 11:36 am
http://www.cryer.co.uk/brian/mysql/howto_add_column_unless_exists.htm

Saludos


Título: Re: MYSQL. Crear un campo en una table si no existe
Publicado por: el-brujo en 4 Marzo 2011, 17:17 pm
cómo bien te dice Novlucker  tienes que crear  un "stored procedure" si es para mirar  campo de una tabla, pero si es para crear una tabla "si no existe" basta con el IF NOT EXISTS

Código:
CREATE TABLE IF NOT EXISTS message_icons 

Citar
MySQL 5.0 soporta las palabras IF NOT EXISTS para que no ocurra un error si la tabla existe. Tenga en cuenta que no hay verificación que la tabla existente tenga una estructura idéntica a la indicada por el comando CREATE TABLE . Nota: Si usa IF NOT EXISTS en un comando CREATE TABLE ... SELECT ,cualquier registro seleccionado por la parte SELECT se inserta si la tabla existe o no.


Título: Re: MYSQL. Crear un campo en una table si no existe
Publicado por: OssoH en 4 Marzo 2011, 17:50 pm
Que grandes que sois!!!
Problema solucionado!!
Gracias.