La mia ricerca e i miei esperimenti non hanno ancora dato una risposta, quindi spero in qualche aiuto.
Sto modificando il file di installazione di un'applicazione che nelle versioni precedenti non aveva una colonna che voglio aggiungere ora. Non voglio aggiungere la colonna manualmente, ma nel file di installazione e solo se la nuova colonna non esiste già nella tabella.
La tabella viene creata come segue:
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.';
Se aggiungo quanto segue, sotto l'istruzione create table, allora non sono sicuro di cosa succede se la colonna esiste già (e forse è popolata):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Quindi, ho provato quanto segue che ho trovato da qualche parte. Questo non sembra funzionare ma non sono del tutto sicuro di averlo usato correttamente.
/*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;*/
Qualcuno ha un buon modo per farlo?