欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

MySQL的存儲過程全面解析

 更新時間:2025年09月06日 10:06:23   作者:詩句  
MySQL的存儲過程是一組為了完成特定功能而預先編譯的SQL語句集,它們存儲在數(shù)據(jù)庫中,可以通過一個簡單的名字來調用執(zhí)行,本文給大家介紹MySQL的存儲過程基本語法知識,感興趣的朋友一起看看吧

介紹

存儲過程是事先經過編譯并存儲在數(shù)據(jù)庫中的一段SQL語句的集合,調用存儲過程可以簡化應用開發(fā)人員的很多工作,減少數(shù)據(jù)在數(shù)據(jù)庫和應用服務器之間的傳輸,對于提高數(shù)據(jù)處理的效率是有好處的。 存儲過程思想上很簡單,就是數(shù)據(jù)庫SQL語言層面的代碼封裝與重用。

特點

  • 封裝,復用
  • 可以接收參數(shù),也可以返回數(shù)據(jù)
  • 減少網(wǎng)絡交互,效率提升

基本語法

創(chuàng)建

create procedure 存儲過程名稱([參數(shù)列表])
begin
     --sql語句
end;

調用

call 名稱([參數(shù)]);

查看

-- 查詢指定數(shù)據(jù)庫的存儲過程及狀態(tài)信息
select from information_schema.routines where routine_schema = 'xxx';
-- 查詢某個存儲過程的定義
show create procedure 存儲過程名稱;

刪除

drop procedure [if exists] 存儲過程名稱;

示例

--定義一個數(shù)據(jù)庫名為‘itcast', 其中的一個表為 ‘student'
--創(chuàng)建
create procedure p1()
begin
    select count(*)  from student
end ;
--調用
call p1();
--查看
select * from information_schema.ROUTINES where ROUTINE_SCHMA = 'itcast';
show create procedure p1 ;
--刪除
drop procedure if exists p1;

單詞:routine(常規(guī),習慣) schema(圖解,計劃,模式) procedure(步驟,程序)

注意:在命令行中,執(zhí)行創(chuàng)建存儲過程的SQL時,需要通過關鍵字delimiter指定SQL語句的結束符。例如 delimiter $$

變量

系統(tǒng)變量

系統(tǒng)變量是MySQL服務器提供,不是用戶定義的,屬于服務器層面。分為全局變量(GLOBAL)、會話變量(SESSION)。

  • 查看系統(tǒng)變量
--查看所有系統(tǒng)變量  默認為session
show [session | global] variables;
--可以通過LIKE模糊匹配方式查找變量
show [session | global] variables like '';
--查看指定變量的值g
select @@[session | global] 系統(tǒng)變量名 ;
  • 設置系統(tǒng)變量
set  [session | global] 系統(tǒng)變量名 = 值 ;
set  @@[session | global] 系統(tǒng)變量名 = 值 ;

用戶自定義變量

用戶定義變量是用戶根據(jù)需要自己定義的變量,用戶變量不用提前聲明,在用的時候直接用“@變量名”使用就可以。其作用域為當前 連接。

注意:用戶自定義變量為一個@,系統(tǒng)變量為兩個@,即@@

賦值

set @var_name = expr; --可以一次賦值多個
set @var_name := expr;
select @var_name := expr;
select 字段名 into @var_name from 表名;

使用

select @var_name;

示例:

set @myname = '李華' ;
set @myage := 10;   --推薦使用" := "的格式,是為了區(qū)分" = "的比較運算符,因為MySQL中沒有" == "賦值運算符
select @mycolor := 'red';
select count(*) into @mycount from test --將test表中的結果賦值給@mycount
select @myname,@myage;

注意: 用戶定義的變量無需對其進行聲明或初始化,只不過獲取到的值為NULL,

局部變量

局部變量是根據(jù)需要定義的在局部生效的變量,訪問之前,需要DECLARE聲明??捎米鞔鎯^程內的局部變量和輸入?yún)?shù),局部變量 的范圍是在其內聲明的BEGIN...END塊。

  • 聲明
    • declare 變量名 變量類型[default ...] ;
    • 變量的數(shù)據(jù)類型就是數(shù)據(jù)庫字段類型 : int , varchar, decimal , datetime等
  • 賦值
    • set 變量名 = 值 ;
    • select 字段名 into 變量名 from 表名 ..;

示例:

create procedure p2()
begin
     --聲明
    declare num int default 0 ;
    --將查詢結果賦值給num
    select count(*) into num from text;
    --查詢
    select num;
end;
--查看
call p2();

if判斷

語法:

if 條件1 then
....
else if 條件2 then
....
else
....
end if ;

舉例:

根據(jù)定義的分數(shù)score變量,判定當前分數(shù)對應的分數(shù)等級。

1.score>=85分,等級為優(yōu)秀。

2.score>=60分且score<85分,等級為及格。

3.score<60分,等級為不及格

create  procedure p3()
begin 
  declare  score int default 58;
  declare  result  varchar(10);
  if  score >= 85 then
     set result := '優(yōu)秀';
  else if  result >= 60 then
    set result := '及格' ;
  else
    set result := '不及格';
  end if ;
  select result;
end;

參數(shù)

例子1:

根據(jù)傳入參數(shù)score,判定當前分數(shù)對應的分數(shù)等級,并返回

1.score>=85分,等級為優(yōu)秀。

2.score>=60分且score<85分,等級為及格。

3.score<60分,等級為不及格

create  procedure p4(in score int, out result varchar(10))
begin 
  if  score >= 85 then
    set result := '優(yōu)秀';
  else if  result >= 60 then
    set result := '及格' ;
  else
    set result := '不及格';
  end if ;
end;
call(68,@result); --第二個變量為用戶自定義變量
select @result;

例子2:將傳入的200分制的分數(shù),進行換算,換算成百分制,然后返回分數(shù)

create procedure p5(inout score double)
begin
  set score := score * 0.5;
end;
set @score = 78;
call p5(@score);
select @score;

case

示例:

根據(jù)傳入的月份,判定月份所屬的季節(jié)(要求采用case結構)。 1.1-3月份,為第一季度

2.4-6月份,為第二季度

3.7-9月份,為第三季度

4.10-12月份,為第四季度

create procedure p6(in month int)
begin
   declare result varchar(10) ;
   case
     when month >= 1 and month <=3 then
        set result := '第一季度';
     when month >= 4 and month <=6 then
        set result := '第二季度';     
     when month >= 7 and month <=9 then
        set result := '第三季度';
     when month >= 10 and month <=12 then
        set result := '第四季度';  
     else
        set result := '非法參數(shù)';
   end case;
   select concat('您輸入的月份為:',month,'所屬的季度為:',result);
end; 
call p6(7);

循環(huán)while

while循環(huán)是有條件的循環(huán)控制語句。滿足條件后,再執(zhí)行循環(huán)體中的SQL語句。具體語法為:

示例:計算從1累加到n的值,n為傳入的參數(shù)值。

-- 實現(xiàn)思路
-- 定義局部變量,記錄累加之后的值
-- 每循環(huán)一次,會對n進行減1,如果n減到0,則退出循環(huán)
create procedure p7(in n int)
begin
  declare total int default 0;
  while n > 0 do
     set total := total + n;
     set n := n - 1;
  end while
  select total;
end;
call p7(10);

到此這篇關于MySQL的存儲過程的文章就介紹到這了,更多相關mysql存儲過程內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

最新評論