我的研究和实验尚未得出答案,所以我希望得到一些帮助.
我正在修改应用程序的安装文件,在以前的版本中没有我想要添加的列.我不想手动添加列,而是在安装文件中,并且只有在表中不存在新列时才这样.
该表创建如下:
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.';
Run Code Online (Sandbox Code Playgroud)
如果我在create table语句下添加以下内容,那么我不确定如果列已经存在(并且可能已填充)会发生什么:
ALTER TABLE `#__comm_subscribers` ADD `subscriber_surname`;
ALTER …Run Code Online (Sandbox Code Playgroud) 我有这个代码:
ALTER TABLE `settings`
ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
Run Code Online (Sandbox Code Playgroud)
并且我想仅在此列不存在时才更改此表.
我正在尝试很多不同的方法,但没有任何作用:
ALTER TABLE `settings`
ADD COLUMN IF NOT EXISTS `multi_user` TINYINT(1) NOT NULL DEFAULT 1
Run Code Online (Sandbox Code Playgroud)
用程序:
DELIMITER $$
CREATE PROCEDURE Alter_Table()
BEGIN
DECLARE _count INT;
SET _count = ( SELECT COUNT(*)
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = 'settings' AND
COLUMN_NAME = 'multi_user');
IF _count = 0 THEN
ALTER TABLE `settings` ADD COLUMN `multi_user` TINYINT(1) NOT NULL DEFAULT 1
END IF;
END $$
DELIMITER ;
Run Code Online (Sandbox Code Playgroud)
我在END IF中出错,然后在END中然后在1中出错
我怎样才能让它变得尽可能简单?
我想更新 MySQL 数据库架构(使用 MySQL 代码),但不幸的是我不确定表的状态,因为它们是分布式的。
假设一些“客户”有一个名为“用户”的表,其架构类似于
name VARCHAR(64) NOT NULL
password VARCHAR(64) NOT NULL
Run Code Online (Sandbox Code Playgroud)
我想添加一个email列,但他们可能已经有一个电子邮件列(取决于他们的安装版本)。
我怎样才能运行一个命令来确保有一个email列并且如果它已经在那里什么都不做?请记住,我会对许多更复杂的表执行此操作。
我知道我可以创建临时表并重新填充(如果它是唯一的解决方案,也会重新填充)但我认为可能有某种CREATE或UPDATEtable 命令具有“哦,您已经拥有该列,跳过”逻辑。
我需要创建一个动态过程,以便每当我需要重命名表的一列时,我都会传递所需的参数,并且它会毫无错误地执行.所以IF的验证.
此代码生成的错误如下:
您的SQL语法有错误; 查看与您的MySQL服务器版本对应的手册,以便在'IF EXISTS(SELECT*FROM information_schema.columns,WHERE table_name ='People''在第1行附近使用正确的语法
DROP PROCEDURE IF EXISTS `change_column_name`;
DELIMITER ;;
CREATE PROCEDURE `change_column_name`(IN tableName VARCHAR(100), IN columnName VARCHAR(100), IN newColumnName VARCHAR(100), IN columnType VARCHAR(20), IN defaultValue VARCHAR(100))
BEGIN
SET @query = CONCAT('IF EXISTS (SELECT * FROM information_schema.columns WHERE table_name = \'', tableName, '\' AND column_name = \'', columnName, '\') THEN
ALTER TABLE \'', tableName, '\' CHANGE COLUMN \'', columnName, '\' \'', newColumnName, '\' ', columnType, ' DEFAULT ', defaultValue, ';
END IF;');
PREPARE stmt1 FROM …Run Code Online (Sandbox Code Playgroud)