mysql查询persons表中是否存在_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();建存储过程与上面代码类似。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值