天天看點

<提升效率>Mysql函數(function)|存儲過程(procedure)函數存儲過程小結

function_procedure

函數

mysql内置的函數很好用,同樣mysql也支援使用者自定義函數

1.為避免和函數中的語句結束符

;

沖突,将語句結束符号臨時重定義為

$$

delimiter $$

2.書寫函數體

  • 文法
create function 函數名(參數清單) returns 傳回值類型
begin
    
declare 變量名 變量類型;
    
邏輯語句;
    
return 傳回值;
    
end
    
$$

           
  • 示例
create function num_add() returns varchar(100)
begin
    
declare i int default 1;
declare x varchar(100) default '';
while i < 20 do
    
if i%2 = 0 then
    
set x = concat(x, " ", i);
    
end if;
    
set i = i + 1;
    
end while;
    
return x;
end
$$
           

3.将語句結束符還原為

;

delimiter ;

4.調用函數

select num_add();

運作結果:

mysql_function

函數體中也可以編寫sql語句,但不能使用

select...from...

,是以通過sql對資料表進行操作的任務,最好交給"存儲過程"

存儲過程

與函數相比,"存儲過程"可以對"所有sql語句"進行完美封裝.

1.為避免和"存儲過程"中的語句結束符

;

$$

delimiter $$

2.建立"存儲過程"

create procedure 存儲過程名稱(參數清單)
begin

sql語句;    


end

$$
           
create procedure show_func_and_proc()
begin
    
select name, type, db from mysql.proc;
end
$$
           

;

delimiter ;

4.調用建立的存儲過程

call show_func_and_proc();

mysql_procedure

小結

函數和存儲過程中的主體都被

begin...end

嵌套,這是一種名為"事務"的結構,目的是保證

begin...end

以内的語句不可分割,要麼完整執行,要麼不執行.