1. 程式人生 > >MySQL之儲存程式是什麼B玩意

MySQL之儲存程式是什麼B玩意

儲存程式

1.什麼是儲存程式

  • 儲存程式指的一組儲存和執行在資料庫伺服器端的程式。儲存程式總是在伺服器的程序或者執行緒的記憶體中執行的。
  • 優點:
    • 簡化sql開發
    • 效率提高
  • 缺點:
    • 資料遷移麻煩
    • 佔用伺服器資源
    • 對資料庫影響較大

2.[儲存]過程

  • 有輸入和輸出引數,儲存一組sql操作,獨立呼叫。

#宣告

delimiter //;

create procedure pro_emp()

begin

  select * from emp;

end;

//

 

#呼叫

call pro_emp();

 

delimiter //;

create procedure pro_emp_no(eno int)

begin

  select ename from emp where empno=eno;

end;

 

call pro_emp_no(7369);

 

引數三種模式:

  IN:輸入模式(預設)

  OUT:輸出模式

  INOUT:輸入輸出模式

elimiter //;

create procedure sel_emp(eno int,out en varchar(20))

begin

   select ename into en from emp where empno = eno;

end;

 

#呼叫

call sel_emp(7788,@name);

select @name;

 

#根據員工姓名查詢職位

delimiter //;

create procedure sel_emp2(inout en_job varchar(20))

begin

  select job into en_job from emp where ename = en_job;

end;

#呼叫

set @name_job='scott';

call sel_emp2(@name_job);

select @name_job;

 

分支:  if

  delimiter //;

create procedure score(score int,out level varchar(20))

begin

 if score>=80 then

   set level='A';

 elseif score>=60 then

   set level ='B';

 else

   set level = 'C';

 end if;   

end;

迴圈:

#while  1+2+...+10

 delimiter //;

 create procedure calc1()

 begin

          #宣告變數

          declare i int;

          declare sum int;

          #賦值

          set i=1;

          set sum=0;

          #迴圈

          while i<=10 do

            set sum=sum+i;

                    set i=i+1;

          end while;

          select sum;

 end;

 

call calc1();

 

 

#loop

delimiter //;

 create procedure calc2()

 begin

          #宣告變數

          declare i int;

          declare sum int;

          #賦值

          set i=1;

          set sum=0;

          #迴圈

          lip:loop

            set sum = sum + i;

                    set i = i+1;

                    if i>10 then

                      leave lip;

                    end if;    

          end loop;

          select sum;

 end;

 

call calc2();

 

#repeat

delimiter //;

 create procedure calc3()

 begin

          #宣告變數

          declare i int;

          declare sum int;

          #賦值

          set i=1;

          set sum=0;

          #迴圈

          repeat

            set sum = sum + i;

                    set i = i+1;

                    until i>10

          end repeat;

          select sum;

 end;

call calc3();

 

3.[儲存]函式

  • 有返回值。

delimiter //;

create function sel_name(eno int)

returns varchar(20)  #返回值型別

DETERMINISTIC #確定的

begin

  declare v_name varchar(20);

  select ename into v_name from emp where empno = eno;

         return v_name;

end;

 

select sel_name(7788);

 

4.觸發器

  • 由事件驅動(不能手動呼叫)