亚洲精品久久久中文字幕-亚洲精品久久片久久-亚洲精品久久青草-亚洲精品久久婷婷爱久久婷婷-亚洲精品久久午夜香蕉

您的位置:首頁技術文章
文章詳情頁

mysql存儲過程原理與用法詳解

瀏覽:5日期:2023-10-15 14:12:43

本文實例講述了mysql存儲過程原理與用法。分享給大家供大家參考,具體如下:

本文內容: 什么是存儲過程 存儲過程的創建 存儲過程的使用 查看存儲過程 修改存儲過程 刪除存儲過程

首發日期:2018-04-17

什么是存儲過程: 存儲過程存儲了一系列sql語句 存儲過程的需求場景:下邊是一個經典的需求場景,很多Mysql的書都有:mysql存儲過程原理與用法詳解 存儲過程存儲了一系列sql語句,使得簡化了操作,不要求重復執行一系列操作。只需要在需要的時候調用一下存儲過程就行了。 一般來說,可以認為存儲過程的功能與函數的功能類似(應該都學過函數吧),但只是要注意存儲過程沒有返回值,所以可以依據函數可用場景來理解存儲過程。補充: 存儲過程與觸發器的區別:觸發器觸發事件就執行一系列語句;而存儲過程是調用,而且存儲過程還要根據情況考慮執行“另外一系列語句”。 存儲過程與函數的區別:函數有返回值,而存儲過程沒有【所以不能使用在select語句中】存儲過程的創建: create procedure 存儲過程名 ([參數列表]) begin sql 語句 end; 參數列表的格式:[類型限定 變量名 數據類型] 參數列表有自己的類型限定,這個類型限定與數據類型不同,它是限定參數的作用范圍 in:限定這個參數是傳值給存儲過程,既然是傳值,所以可以是變量或常量數據【in修飾的參數一般是傳入存儲過程中作為某些條件的,不會被存儲過程修改】out:限定這個參數是存儲過程傳出的一個值,因為有值的返回,所以這個參數必須是一個變量【存儲過程中會給out修飾的變量賦值,使得過程外部可以獲取這個更改的值】inout:inout是上面兩者的疊加,既可以被存儲過程內部使用,又可以修改后被外部使用,因為有值的返回,所以這個參數必須是一個變量 理論上,對于希望簡潔代碼的地方都可以使用存儲過程來處理,比如希望快速使用多條select,又比如希望從數據中取出多個值賦值給變量;所以下面只給出用法,應用場景就不講述了。 1:不傳入參數,只執行某些特定代碼 2.傳入參數,并利用參數作為條件執行代碼 3.傳入參數,并利用參數作為條件執行代碼,同時利用變量獲取結果。 【下面的call是調用過程】

-- 最簡單的例子create procedure myselect()begin select @@version;end;create procedure getInfo(in mname varchar(15))begin select mname;end;call myselect();call getInfo('lilie');-- 能通過傳參來獲取指定內容的create procedure getInfo2(in mname varchar(15))begin select * from student where name =mname;end;call getInfo2('lilei');-- 將結果賦值給一個變量傳到外部create procedure getInfo3(in mname varchar(15),out oname varchar(15))begin select name from student where name =mname into oname;end;call getInfo3('lilei',@mname);select @mname;補充: 與觸發器類似,如果在命令行模式下進行存儲過程創建,需要修改命令結束符。 還可以有一些特別的選項,特別的選項寫在([參數列表]) 之后,begin之前comment:是這個存儲過程的一個描述

create procedure myselect2()comment '我的一系列sql語句'begin select * from student; select * from class;end;show create procedure myselect2; 還有一些比如sql security等選項,有興趣可以自行百度。這里不講解,僅一提有此知識點。 存儲過程的使用: 調用存儲過程:call 存儲過程名(); 帶參數的調用存儲過程:call 存儲過程名(參數);對于in類型的,參數可以是數值,可以是變量 對于outinout類型的,參數必須是變量 所有MySQL變量都必須以 @ 開始 示例:call myselect('lilei',@變量名);示例:call myselect(@變量名,@變量名)

下面調用的存儲過程就是上面創建存儲過程中定義的存儲過程:

call myselect();call getInfo('lilie');set @mname='lilei';call getInfo(@mname);call getInfo3('lilei',@mname);變量的使用: out和inout能修改會被存儲過程修改的變量,但這個修改會在存儲過程調用結束后才會成功修改【就好像如果在過程內部現有一條命令是修改的,可以在此命令后面查看一下變量,發現全局變量并沒有改變,改變的只是局部變量】。 所有MySQL變量都必須以 @ 開始 存儲過程中,使用局部變量可以使用select 變量名;使用全局變量可以使用select @變量名; 關于具體變量的定義與使用將在我的另外一篇博文中講解。超鏈接:mysql之變量查看存儲過程: 查看存儲過程的創建語句:show create procedure 存儲過程名; 查看存儲過程狀態:show procedure status;【顯示的內容包括創建時間、注釋、定義的用戶、安全類型等等】修改存儲過程: 修改存儲過程只能修改那些選項(這里不講解那些具體選項,想了解的可以自行百度),并不能修改傳入傳出參數或者sql語句。 alter procedure 存儲過程名 選項;mysql存儲過程原理與用法詳解 刪除存儲過程: 語法:drop procedure 存儲過程名; 示例:

drop procedure getInfo;

更多關于MySQL相關內容感興趣的讀者可查看本站專題:《MySQL存儲過程技巧大全》、《MySQL常用函數大匯總》、《MySQL日志操作技巧大全》、《MySQL事務操作技巧匯總》及《MySQL數據庫鎖相關技巧匯總》

希望本文所述對大家MySQL數據庫計有所幫助。

標簽: MySQL 數據庫
相關文章:
主站蜘蛛池模板: 日韩电影中文字幕在线网站 | mm在线视频免费看 | 2020久久精品永久免费 | 一级做a爱过程视频免 | 天天更新天天久久久更新影院 | 中国一级特黄特爽刺激大片 | xxxxx亚洲| 成人做爰免费看网站 | 亚洲欧美片 | 亚洲综合伊人制服丝袜美腿 | 久久这里只有精品首页 | 国产亚洲图片 | 欧美高清一级片 | 成人做爰免费视频免费看 | 国产综合成色在线视频 | 黄色免费在线观看 | 激情视频网站在线观看 | 国产uv1区二区三区 国产va免费精品观看 | 鲁大师在线观看在线播放 | 黄视频免费在线 | 玖玖中文字幕 | 国产精品jlzz视频 | 污网站大全免费 | 中国国产一国产一级毛片视频 | 国产网红主播精品福利大秀专区 | 免费香蕉一区二区在线观看 | 欧美日韩一区二区三区在线观看 | jul724青木玲中文字幕 | 2020国产成人免费视频 | 国产极品在线观看视频 | 黄色大片网站在线观看 | 国产精品二区三区免费播放心 | 久久国内精品自在自线400部o | 欧美三级在线观看黄 | 日本黄色一区 | 久久精品国产亚洲片 | 国产综合视频在线 | 国产亚洲一区二区三区在线观看 | 毛片毛片毛片 | 啪视频免费 | 欧美啪|