Nghiên cứu và thử nghiệm của tôi vẫn chưa mang lại câu trả lời, vì vậy tôi hy vọng được giúp đỡ.
Tôi đang sửa đổi tệp cài đặt của một ứng dụng mà trong các phiên bản trước không có cột mà tôi muốn thêm ngay bây giờ. Tôi không muốn thêm cột theo cách thủ công, nhưng trong tệp cài đặt và chỉ khi cột mới chưa tồn tại trong bảng.
Bảng được tạo như sau:
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.';
Nếu tôi thêm phần sau, bên dưới câu lệnh tạo bảng, thì tôi không chắc điều gì sẽ xảy ra nếu cột đã tồn tại (và có lẽ đã được điền):
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER TABLE `#__comm_subscribers` MODIFY `subscriber_surname` varchar(64) NOT NULL default '';
Vì vậy, tôi đã thử cách sau mà tôi tìm thấy ở đâu đó. Điều này dường như không hiệu quả nhưng tôi không hoàn toàn chắc chắn rằng tôi đã sử dụng nó đúng cách.
/*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;*/
Có ai có một cách tốt để làm điều này?