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

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

 

 

  • 19
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 33
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 33
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

AlbertS

常来“玩”啊~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值