Meine Forschungen und Experimente haben noch keine Antwort geliefert, daher hoffe ich auf Hilfe.
Ich ändere die Installationsdatei einer Anwendung, die in früheren Versionen keine Spalte hatte, die ich jetzt hinzufügen möchte. Ich möchte die Spalte nicht manuell hinzufügen, sondern in der Installationsdatei und nur, wenn die neue Spalte noch nicht in der Tabelle vorhanden ist.
Die Tabelle wird wie folgt erstellt:
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.';
Wenn ich unter der Anweisung create table Folgendes hinzufüge, bin ich mir nicht sicher, was passiert, wenn die Spalte bereits vorhanden ist (und möglicherweise ausgefüllt ist):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Also habe ich Folgendes versucht, was ich irgendwo gefunden habe. Dies scheint nicht zu funktionieren, aber ich bin nicht ganz sicher, ob ich es richtig verwendet habe.
/*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;*/
Hat jemand einen guten Weg, dies zu tun?