mysql 方法和存儲過程

變量

  • 局部變量:declare:|用戶可以使用DECLARE關鍵字來定義變量。然後可以爲變量賦值。這些變量的作用範圍是BEGIN…END程序段中
  • 用戶變量:@變量名:eg:@a 定義用戶變量,作用域在整個鏈接
  • 會話變量:在每次連接成功後會將全局變量拷貝一份到當前回話:set session var_name = value; show variables like “autocommit”;
  • 全局變量: set global var_name = value;

https://www.cnblogs.com/gavin110-lgy/p/5772577.html

存儲過程

delimiter $$
drop procedure if exists create_data_for_test2;
create procedure create_data_for_test2(in num int,out total int)
begin
    declare count int default 0;
	declare batch_num int default 0;
    dd:loop
		START TRANSACTION;--手動提交事務,提高效率
		batch:loop
			insert into test2(b,c,d,e) values(round(rand()*10),round(rand()*10),round(rand()*10),round(rand()*count));
			set count=count+1;
			set batch_num:=batch_num+1;
			if count>=num then 
				leave dd;
			end if;
			if batch_num>=10 then
				commit;
				set batch_num=0;
				leave batch;
			end if;
		end loop batch;
    end loop dd;
	commit;
    select count(*) into total from test2;
end;$$
delimiter ;


show procedure status;
drop procedure create_data;

函數

delimiter $$
create function get_b_by_a(a1 int)
    returns int
    begin
        declare b_test2 int default 0;
        select b into b_test2 from test2 where a=a1;
        return b_test2;
    end$$ 
delimiter ;
show function status\G;

函數和存儲過程的區別

  • 返回值上的不同:函數將向調用者返回一個且僅返回一個結果值;存儲過程將返回一個或多個結果集,或者無返回值
  • 調用方式上的不同:函數嵌入在sql中使用的,可以在select中調用;存儲過程只能通過call語句進行調用
  • 參數的不同:存儲函數的參數類型類似於IN參數;存儲過程的參數類型有三種、IN參數、OUT參數、INOUT參數
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章