【MYSQL】存储过程在批量处理数据表中的应用

  文章以MYSQL存储过程批量添加、删除数据表字段为例,展现了MYSQL存储过程在数据分析中快速对大批量数据进行重复性操作的能力,大幅度提升数据表处理效率。

创建数据库及数据表

  先在数据库系统下建立数据库和数据表。为后面的事项做准备,这里创建名为top1的数据库,在top1数据库下创建名为table1、table2的两个数据表。下图是创建表table1后的字段描述截图。

create database top1;#建库
use top1;#用库
create table table1(default1 int primary key AUTO_INCREMENT);#建表1,添加自增字段为主键
create table table2(default1 int primary key AUTO_INCREMENT);#建表2,添加自增字段为主键

在这里插入图片描述

创建存储过程

  建立一个储存过程,实现对数据表的批量添加、删除字段功能,并且能够指定修改的数据表、修改字段的数量、名称,通过下面的代码可以创建。

create database top1;
use top1;
create table table1(default1 int primary key AUTO_INCREMENT);
create table table2(default1 int primary key AUTO_INCREMENT);

drop procedure xz;
delimiter // -- 修改结束符
create procedure alter_change(in n1 int,in n2 int,in tablename char(10),in zdname char(10))
-- 创建名为alter_change的储存过程,参数:n1(=1:添加,=2:删除)、n2(修改字段的数量,数字型)
-- 数据表名(字符型)、字段名(字符型)
begin

declare i int default 1; -- 定义局部变量
declare num varchar(2);
set  @qcod =concat('alter table ',tablename,' ');
	if n1 =2 then-- 控制流
		while i<n2 do
			set num=cast(i as char(2));
			set @qcod =concat(@qcod,'drop ',zdname,num,' ,');
			set i=i+1;
		end while;
	    set @qcod = concat(@qcod, 'drop ',zdname,cast(n2 as char(2)),';');
    
    elseif n1=1 then
		while i<n2 do
			set num=cast(i as char(2));
			set @qcod =concat(@qcod,'add ',zdname,num,' char(1) not null,');
			set i=i+1;
		end while;
		set @qcod = concat(@qcod, 'add ',zdname,cast(n2 as char(2)),' char(1) not null;');
	else set @qcod='参数错误';
	end if;
	
end //
delimiter ; -- 还原结束符

调用储存过程


call alter_change(1,3,'table1','cnameid');#调用储存过程alter_change为表table1添加三个字段名为nameid(序号为1,
--  2,3)的字段
select @qcod;-- 检查储存过程的sql语句
prepare t from @qcod;-- sql语句无误后执行预处理
execute t;
desc table1;-- 查看通过储存过程修该改后的表table的字段描述

  通过call alter_change(1,3,'table1','cnameid')调用储存过程alter_change,为表table1添加了三个字段,字段名分别为nameid1、nameid2、nameid3。结果如下图:
在这里插入图片描述
  在实际的数据分析工作中,文中创建的储存过程显得太低级。不过没关系,万丈高楼平地起,在该储存过程的基础上不断升级就可以了!当然,不同的业务数据、需求也需要创建对应的储存过程来处理。欢迎评论留言,谢谢!

发布了39 篇原创文章 · 获赞 42 · 访问量 4878

猜你喜欢

转载自blog.csdn.net/weixin_41774099/article/details/96585854