最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

MySQL的存儲(chǔ)過(guò)程全面解析

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

介紹

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

特點(diǎn)

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

基本語(yǔ)法

創(chuàng)建

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

調(diào)用

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

查看

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

刪除

drop procedure [if exists] 存儲(chǔ)過(guò)程名稱;

示例

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

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

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

變量

系統(tǒng)變量

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

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

用戶自定義變量

用戶定義變量是用戶根據(jù)需要自己定義的變量,用戶變量不用提前聲明,在用的時(shí)候直接用“@變量名”使用就可以。其作用域?yàn)楫?dāng)前 連接。

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

賦值

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

使用

select @var_name;

示例:

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

注意: 用戶定義的變量無(wú)需對(duì)其進(jìn)行聲明或初始化,只不過(guò)獲取到的值為NULL,

局部變量

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

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

示例:

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

if判斷

語(yǔ)法:

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

舉例:

根據(jù)定義的分?jǐn)?shù)score變量,判定當(dāng)前分?jǐn)?shù)對(duì)應(yīng)的分?jǐn)?shù)等級(jí)。

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

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

3.score<60分,等級(jí)為不及格

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,判定當(dāng)前分?jǐn)?shù)對(duì)應(yīng)的分?jǐn)?shù)等級(jí),并返回

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

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

3.score<60分,等級(jí)為不及格

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); --第二個(gè)變量為用戶自定義變量
select @result;

例子2:將傳入的200分制的分?jǐn)?shù),進(jìn)行換算,換算成百分制,然后返回分?jǐn)?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結(jié)構(gòu))。 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)控制語(yǔ)句。滿足條件后,再執(zhí)行循環(huán)體中的SQL語(yǔ)句。具體語(yǔ)法為:

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

-- 實(shí)現(xiàn)思路
-- 定義局部變量,記錄累加之后的值
-- 每循環(huán)一次,會(huì)對(duì)n進(jì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);

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

相關(guān)文章

  • MySQL中CHAR與VARCHAR類型舉例解析

    MySQL中CHAR與VARCHAR類型舉例解析

    在MySQL數(shù)據(jù)庫(kù)中CHAR和VARCHAR是兩種常見的字符串?dāng)?shù)據(jù)類型,它們?cè)诖鎯?chǔ)和處理方式上有著顯著的區(qū)別,這篇文章主要介紹了MySQL中CHAR與VARCHAR類型的相關(guān)資料,文中通過(guò)代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2025-11-11
  • mysql8.0.21安裝教程圖文詳解

    mysql8.0.21安裝教程圖文詳解

    這篇文章主要介紹了mysql8.0.21安裝教程,本文通過(guò)圖文并茂的形式給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-09-09
  • 更改Mysql數(shù)據(jù)庫(kù)存儲(chǔ)位置的具體步驟

    更改Mysql數(shù)據(jù)庫(kù)存儲(chǔ)位置的具體步驟

    首先把mysql的服務(wù)先停掉,更改MySQL配置文件My.ini中的數(shù)據(jù)庫(kù)存儲(chǔ)主路徑,將老的數(shù)據(jù)庫(kù)存儲(chǔ)主路徑中的數(shù)據(jù)庫(kù)文件和文件夾復(fù)制到新的存儲(chǔ)主路徑,接下來(lái)重啟搞定
    2013-07-07
  • MySQL分表策略與實(shí)踐小結(jié)

    MySQL分表策略與實(shí)踐小結(jié)

    MySQL分表是將原始表中的數(shù)據(jù)按照一定規(guī)則分散到多個(gè)表中,以減輕單表數(shù)據(jù)量過(guò)大的壓力,本文主要介紹了MySQL分表策略與實(shí)踐小結(jié),具有一定的參考價(jià)值,感興趣的可以了解一下
    2024-03-03
  • Mysql中的自連接問(wèn)題

    Mysql中的自連接問(wèn)題

    這篇文章主要介紹了Mysql中的自連接問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-05-05
  • 關(guān)于MySQL死鎖的產(chǎn)生原因、檢測(cè)與解決方式

    關(guān)于MySQL死鎖的產(chǎn)生原因、檢測(cè)與解決方式

    這篇文章主要介紹了關(guān)于MySQL死鎖的產(chǎn)生原因、檢測(cè)與解決方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2024-07-07
  • 解決mysql數(shù)據(jù)庫(kù)數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問(wèn)題

    解決mysql數(shù)據(jù)庫(kù)數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問(wèn)題

    最近接手一個(gè)java項(xiàng)目,需要進(jìn)行重構(gòu),使用國(guó)產(chǎn)數(shù)據(jù)庫(kù)達(dá)夢(mèng)8替換mysql數(shù)據(jù)庫(kù)需要滿足這個(gè)要求,在遷移過(guò)程中遇到mysql數(shù)據(jù)庫(kù)數(shù)據(jù)遷移達(dá)夢(mèng)數(shù)據(jù)亂碼問(wèn)題,怎么解決呢,下面把過(guò)程分享給大家一起看看吧
    2021-08-08
  • mysql注入之長(zhǎng)字符截?cái)?orderby注入,HTTP分割注入,limit注入方式

    mysql注入之長(zhǎng)字符截?cái)?orderby注入,HTTP分割注入,limit注入方式

    這篇文章主要介紹了mysql注入之長(zhǎng)字符截?cái)?orderby注入,HTTP分割注入,limit注入方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Ubuntu18.04 安裝mysql8.0.11的圖文教程

    Ubuntu18.04 安裝mysql8.0.11的圖文教程

    本文通過(guò)圖文并茂的形式給大家介紹了Ubuntu18.04 安裝mysql8.0.11的方法,非常不錯(cuò),具有一定的參考借鑒價(jià)值,需要的的朋友參考下吧
    2018-07-07
  • MySQL數(shù)據(jù)庫(kù)的約束與設(shè)計(jì)解讀

    MySQL數(shù)據(jù)庫(kù)的約束與設(shè)計(jì)解讀

    文章介紹了數(shù)據(jù)庫(kù)的約束類型,包括非空約束、默認(rèn)約束、唯一約束、主鍵約束、外鍵約束和check約束,并介紹了數(shù)據(jù)庫(kù)設(shè)計(jì)的三大范式:第一范式、第二范式和第三范式,還介紹了如何根據(jù)業(yè)務(wù)需求進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)和創(chuàng)建實(shí)體-關(guān)系圖
    2026-01-01

最新評(píng)論

石景山区| 微博| 长岭县| 随州市| 广东省| 福建省| 福州市| 共和县| 门源| 鱼台县| 石家庄市| 嘉义市| 珲春市| 望城县| 调兵山市| 绥阳县| 溧水县| 宝丰县| 浦县| 呼伦贝尔市| 普宁市| 新河县| 荆门市| 清丰县| 黄浦区| 社旗县| 洪雅县| 本溪| 太仓市| 长宁区| 翁源县| 古丈县| 平阴县| 蕉岭县| 平远县| 古丈县| 西青区| 通海县| 田东县| 含山县| 晋中市|