mysql检查列是否存在自动添加
一、准备条件
1.mysql数据库正常运行,服务正常启动。
2.已知想添加的数据库、表和字段。
3.了解存储过程的基本用法。
4.举例说明,我用的数据库名为test、表名为persons、其中有一个字段为Id_A。
5.问题:现在想知道这个表中是否有字段Id_B,如果没有请添加。
二、编写存储过程
DROP PROCEDURE IF EXISTS p7; --防止数据库中有这个存储过程,先删掉
CREATE PROCEDURE p7()
BEGIN
DECLARE nRetRowCount int;
SELECT count(COLUMN_NAME) INTO nRetRowCount
FROM information_schema.columns
WHERE table_name = 'persons'
AND column_name = 'Id_B';
IF nRetRowCount = 0 THEN --如果没有记录
ALTER TABLE persons ADD Id_B int(4);
END IF;
END
DROP PROCEDURE IF EXISTS AddColumnsByIsNotExist;
CREATE PROCEDURE AddColumnsByIsNotExist (IN paramDBName VARCHAR(32), IN paramTableName VARCHAR(32),IN paramColumnName VARCHAR(32),IN paramColumnType VARCHAR(16), IN paramDefaultVal VARCHAR(16))
BEGIN
DECLARE nRetRowCount int;
SELECT count(COLUMN_NAME) INTO nRetRowCount
FROM information_schema.columns
WHERE UPPER(TABLE_SCHEMA) = UPPER(paramDBName)
AND UPPER(TABLE_NAME) = UPPER(paramTableName)
AND UPPER(COLUMN_NAME) = UPPER(paramColumnName);
IF nRetRowCount = 0 THEN
SET @prepareStatement = CONCAT("ALTER TABLE ", paramTableName, " ADD COLUMN ",paramColumnName ," ", paramColumnType, " DEFAULT ", paramDefaultVal, " ");
PREPARE stmt FROM @prepareStatement;
EXECUTE stmt ;
DEALLOCATE PREPARE stmt;
END IF;
END
三、执行存储过程
1.建议:查询资料说可以是有exec或call,而我这只有call好用,是不是我的版本问题,欢迎大家给出解答和建议。
2.方法:执行方法在命令行中输入call p7();即可,也可以在其他存储过程中调用这个存储过程,调用方法一样call p7();建存储过程与上面代码类似。