使用mysql自定义函数验证表中字段是否添加

一、背景

在项目中我们的业务使用了分表的策略,因此mysql库中会有很多表名相似只是序号不同的表(如:dingning_program_00、dingning_program_01、…、dingning_program_63)。
在开发过程中会有给数据库中的表添加字段的需求,这样我们就需要写ddl语句在这64张表中添加字段。
但是这样就一个问题就是所有表中的字段是否都添加成功,自己一个个验证有些麻烦,所以写了这个mysql函数进行验证。

二、实现

//该test()如果存在就删除他
Drop function if exists test;
//创建函数,并确定返回值类型
create function test() returns VARCHAR(1024)
BEGIN
	//定义一些局部变量
	 declare i int default 0;
	 declare st1 varchar(1024) default '';
	 declare st2 varchar(1024) default '';
	 declare st3 varchar(1024) default '';
	 declare st4 varchar(1024) default '';
 
 	//循环开始
   while i <= 63 do
   			//前10张表的序号都是以0开头,单独拼接
		 if i <= 9 THEN
		 		//表名进行拼接
				 set st1 = CONCAT("dingning_program_","0",i);
				 //查找表中是否有这个字段并返回表名,同时赋值给st3变量
				 //注:如果返回的值为空,即表中没有这个字段,则不给st3赋值
				 SELECT TABLE_NAME into st3 FROM information_schema.columns WHERE table_name =st1 AND column_name = 'launcher_sky_backgroup_url';
				 //如果st3没有改变,即表中没有这个字段,就把表的序号进行拼接
				 if st3 = '' then
						set st4 = CONCAT(st4,"+",i);
				 end if;
		//后面的表按照i值单独拼接	
		 ELSE
		 	//表名进行拼接
			 set st2 = CONCAT("dingning_program_",i);
			 //查找表中是否有这个字段并返回表名,同时赋值给st3变量
			 //注:如果返回的值为空,即表中没有这个字段,则不给st3赋值
			  SELECT TABLE_NAME into st3 FROM information_schema.columns WHERE table_name =st2 AND column_name = 'launcher_sky_backgroup_url';
			  	//如果st3没有改变,即表中没有这个字段,就把表的序号进行拼接
				 if st3 = '' then
						set st4 = CONCAT(st4,"+",i);
				 end if;	
		 end if;
		 
		 set st3 = '';
		 set i = i + 1;
   end while;
     //把表中没有“launcher_sky_backgroup_url”该字段的表名的序号进行返回
	 return st4;
END;
//调用函数
select test();
//该test()如果存在就删除他
Drop function if exists test;

三、最后

  1. 上面的代码复制到mysql运行时需要把上面的注释去掉,mysql的注释语法不是//
  2. 此代码写的比较简陋,还有很大的优化空间或者还有更好的方法去实现,希望同行指正。
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

栗然

你的鼓励将是我创作的最大动力

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

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

打赏作者

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

抵扣说明:

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

余额充值