色综合图-色综合图片-色综合图片二区150p-色综合图区-玖玖国产精品视频-玖玖香蕉视频

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

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

瀏覽:4日期: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 數據庫
相關文章:
主站蜘蛛池模板: 一区二区视屏 | 嫩草影院在线观看网站成人 | 精品xxxxxbbbb欧美中文 | 精品九九久久国内精品 | 国产在线观看第一页 | 99在线视频播放 | 日韩精品一区二区三区中文字幕 | 另类zoofilia杂交videos | 国产精品李雅在线观看 | 欧美一级α片毛片免费观看 | 国产亚洲综合成人91精品 | 亚洲精品成人 | 五月久久亚洲七七综合中文网 | 久久99精品久久久久久久不卡 | 成 人色 网 站 欧美大片在线观看 | 国产一区二三区 | 欧美亚洲国产成人综合在线 | 国产精品一区二区三区免费 | 男人的天堂毛片 | 亚洲看黄 | 日韩第五页 | 激情午夜天 | 久久在线视频 | 中文字幕亚洲精品久久 | 在线看免费观看韩国特黄一级 | 加勒比一本一道在线 | 精品国产免费人成在线观看 | 黄色网址网站 | 久久爰www免费人成 久久曰视频 | 亚洲一级香蕉视频 | 特级a做爰全过程片 | 在线看片日本 | 2022日韩理论片在线观看 | 2345成人高清毛片 | 欧美午夜免费一级毛片 | 久久99久久精品免费思思 | 精品一精品国产一级毛片 | 不卡午夜 | 成年人在线免费观看视频网站 | 一级待一黄aaa大片在线还看 | 久久精品大片 |