暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

mysql检查数据库是否存在某列,若不存在则添加

原创 AlbertS 2019-11-21
1497

版权声明: 转载请注明出处!本文采用 知识共享 署名-非商业性使用-禁止演绎 4.0 国际许可协议

一、准备条件

  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();建存储过程与上面代码类似。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论