版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议
一、准备条件
- mysql数据库正常运行,服务正常启动。
- 已知想添加的数据库、表和字段。
- 了解存储过程的基本用法。
- 举例说明,我用的数据库名为test、表名为persons、其中有一个字段为Id_A。
- 问题:现在想知道这个表中是否有字段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
三、执行存储过程
-
建议:查询资料说可以是有exec或call,而我这只有call好用,是不是我的版本问题,欢迎大家给出解答和建议。
-
方法:执行方法在命令行中输入call p7();即可,也可以在其他存储过程中调用这个存储过程,调用方法一样call p7();建存储过程与上面代码类似。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




