存储过程 为指定的数据库所有表增加若干字段

为指定数据库添加所有表增加若干字段

1.项目背景

公司项目需要将所有表增加修改时间、修改人、逻辑删除标注字段,有138张表。如果手动修改需要累出血,所以使用存储过程修改

2.存储过程源码

-- 判断是否有这个存储过程 有的话删除
DROP PROCEDURE IF EXISTS insert_multi;
-- 创建存储过程 参数为数据库名
CREATE  PROCEDURE insert_multi(IN dbname VARCHAR(200))
BEGIN

-- 声明判断标准位
DECLARE done INT DEFAULT 0;
-- 声明表名
DECLARE tableName VARCHAR(200);
-- 查询所有表名放入游标
DECLARE cur CURSOR FOR SELECT table_name FROM information_schema.TABLES WHERE table_schema = dbname;
-- 改变判断位
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;
-- 打开游标
OPEN cur;

REPEAT
-- 将cur的表名放入tableName
FETCH cur INTO tableName;
-- 将表名放入临时变量
SET @newname = tableName;
IF NOT done THEN
-- 查询字段是否已经存在
SET @SQL = CONCAT("SELECT count(*) into @count FROM information_schema.columns WHERE table_name='",@newname,"' and COLUMN_NAME='deleted_flag'  and table_schema='",dbname,"'");
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt ;
-- 如果不存在
IF  @count =0
THEN
-- 进行修改操作
 SET @SQL = CONCAT('alter table `',@newname,'` add deleted_flag TINYINT;');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
END IF;

SET @SQL = CONCAT("SELECT count(*) into @count FROM information_schema.columns WHERE table_name='",@newname,"'AND COLUMN_NAME='creator_name' and table_schema='",dbname,"'");
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt ;

IF   @count =0
THEN
SET @SQL = CONCAT('alter table `',@newname,'` add creator_name varchar(50);');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
END IF;


SET @SQL = CONCAT("SELECT count(*) into @count FROM information_schema.columns WHERE table_name='",@newname,"' AND COLUMN_NAME='updater_name' and table_schema='",dbname,"'");
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;

IF   @count =0
THEN
SET @SQL = CONCAT('alter table `',@newname,'` add updater_name varchar(50);');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
END IF;

SET @SQL = CONCAT("SELECT count(*) into @count FROM information_schema.columns WHERE table_name='",@newname,"' AND COLUMN_NAME='update_date' and table_schema='",dbname,"'");
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
IF   @count =0
THEN
SET @SQL = CONCAT('alter table `',@newname,'` add update_date datetime;');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
END IF;

SET @SQL = CONCAT("SELECT count(*) into @count FROM information_schema.columns WHERE table_name='",@newname,"' AND COLUMN_NAME='updater' and table_schema='",dbname,"'");
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt ;
IF   @count =0
THEN
SET @SQL = CONCAT('alter table `',@newname,'` add updater BIGINT;');
PREPARE tmpstmt FROM @SQL;
EXECUTE tmpstmt;
END IF;

DEALLOCATE PREPARE tmpstmt;

END IF;
UNTIL done END REPEAT;
CLOSE cur;
END

call insert_multi('库名');
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值