文章以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。结果如下图:
在实际的数据分析工作中,文中创建的储存过程显得太低级。不过没关系,万丈高楼平地起,在该储存过程的基础上不断升级就可以了!当然,不同的业务数据、需求也需要创建对应的储存过程来处理。欢迎评论留言,谢谢!