【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。結果如下圖:
在這裏插入圖片描述
  在實際的數據分析工作中,文中創建的儲存過程顯得太低級。不過沒關係,萬丈高樓平地起,在該儲存過程的基礎上不斷升級就可以了!當然,不同的業務數據、需求也需要創建對應的儲存過程來處理。歡迎評論留言,謝謝!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章