Mi investigación y experimentos aún no han dado una respuesta, por lo que espero recibir ayuda.
Estoy modificando el archivo de instalación de una aplicación que en versiones anteriores no tenía una columna que quiero agregar ahora. No quiero agregar la columna manualmente, sino en el archivo de instalación y solo si la nueva columna no existe en la tabla.
La tabla se crea de la siguiente manera:
CREATE TABLE IF NOT EXISTS `#__comm_subscribers` (
`subscriber_id` int(11) NOT NULL auto_increment,
`user_id` int(11) NOT NULL default '0',
`subscriber_name` varchar(64) NOT NULL default '',
`subscriber_surname` varchar(64) NOT NULL default '',
`subscriber_email` varchar(64) NOT NULL default '',
`confirmed` tinyint(1) NOT NULL default '0',
`subscribe_date` datetime NOT NULL default '0000-00-00 00:00:00',
PRIMARY KEY (`subscriber_id`),
UNIQUE KEY `subscriber_email` (`subscriber_email`)
) ENGINE=MyISAM CHARACTER SET 'utf8' COLLATE 'utf8_general_ci' COMMENT='Subscribers for Comm are stored here.';
Si agrego lo siguiente, debajo de la declaración de creación de la tabla, entonces no estoy seguro de qué sucede si la columna ya existe (y tal vez está poblada):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Entonces, probé lo siguiente que encontré en alguna parte. Esto no parece funcionar, pero no estoy completamente seguro de haberlo utilizado correctamente.
/*delimiter '//'
CREATE PROCEDURE addcol() BEGIN
IF NOT EXISTS(
SELECT * FROM information_schema.COLUMNS
WHERE COLUMN_NAME='subscriber_surname' AND TABLE_NAME='#__comm_subscribers'
)
THEN
ALTER TABLE `#__comm_subscribers`
ADD COLUMN `subscriber_surname` varchar(64) NOT NULL default '';
END IF;
END;
//
delimiter ';'
CALL addcol();
DROP PROCEDURE addcol;*/
¿Alguien tiene una buena manera de hacer esto?