亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 數據庫 > MySQL > 正文

窺探mysql存儲過程細節

2024-07-24 13:08:57
字體:
來源:轉載
供稿:網友
這篇文章主要為大家詳細介紹了mysql存儲過程細節,對mysql存儲過程感興趣的小伙伴們可以參考一下
 

存儲過程,可以這樣認為,將我們需要特殊處理的sql語句封裝成函數,當需要的時候我們只需調用這個函數就可以實現我們想要的操作,這個過程我們可以稱之為存儲過程。當然了,真正存儲過程的定義不是這樣的。但是我們可以這樣簡單的去理解存儲過程。

下面我們看一個簡單的使用存儲過程的例子。

首先我們新建一張表 proced:

create table proced(     id int(5) primary key auto_increment,     name varchar(50),     type varchar(50));

然后我們需要向這個表中插入10萬條數據,這個時候我們需要借助存儲過程來實現這一功能。

mysql> delimiter //mysql> create procedure adddata()     -->begin     -->declare n int default 0;     -->while n<100000     -->do     -->insert into proced(name,type) values(‘跡憶博客','onmpw');     -->set n = n+1;     -->end while;     -->end     -->//mysql> delimiter ;mysql> call adddata();

使用上述存儲過程,我們就可以向proced表中插入10萬條數據了。

借助上述小例子,我們來講一下如何創建一個存儲過程。

創建存儲過程

首先我們來看一下創建存儲過程的語法:

CREATE PROCEDURE procedure_name(IN/OUT/INOUT parameter TYPE)BEGIN     procedure_bodyEND

這個過程比較簡單。

在上面的小例子中我們看到在創建存儲過程之前使用了delimiter //;,創建完成之后又再次 使用了命令 delimiter ;。

delimiter 是界定符,我們知道,在mysql命令行客戶端,是通過分號(;)來界定一個命令是否完成的。在存儲過程中,我們會多次使用到分號,但是這并不代表命令的結束,所以說我們需要使用delimiter命令來改變這個界定符。

mysql> delimiter //;  改變界定符為 //mysql> delimiter ; 重新改變界定符為分號

 

所以說我們如果使用mysql命令行創建存儲過程的話,我們必須在創建存儲過程之前使用上述命令改變界定符。

接下來我們看到procedure_name()中的IN/OUT/INOUT,這是代表什么意思呢?

一個IN類型的參數會傳遞一個值到存儲哦過程中,也就是我們在編程語言中自定義函數的參數。如果參數前面沒有指定是IN/OUT/INOUT,那默認會是IN,看下面的例子:

mysql>delimiter //mysql> create procedure in_proced(IN param VARCHAR(100))      -->begin      -->insert into proced(name,type) values(param,'onmpw');      -->end      -->//mysql>delimiter ;mysql> call in_proced(‘onmpw.com');

這就是在參數前指定IN的含義。

下面我們看OUT,指定為OUT的參數將從存儲過程中傳遞一個值給調用者,也就是說,OUT可以認為這個參數就是我們自定義函數中的返回值。

mysql> delimiter //mysql> create procedure out_proced(OUT param INT)     -->begin     -->select count(*) into param from proced;     -->end     -->//mysql>delimiter ;mysql> call out_proced(@a);mysql>select @a;+------+| @a |+------+| 3   |+------+

最后就是INOUT,很明顯INOUT指定的參數被調用者初始化,其值在存儲過程中可以被修改,并且任何改變對于調用者來說都是可見的。

看下面的例子:

mysql> delimiter //mysql> create procedure inout_proced(INOUT param INT)     --> begin     --> select count(*) into param from proced where id>param;     --> end     -->//mysql>delimiter ;mysql>set @a = 3;mysql>call inout_proced(@a);mysql>select @a; 查看變量的值是否改變

以上就是創建一個簡單的存儲過程的方式。

刪除存儲過程

刪除存儲過程的語法:

DROP PROCEDURE IF EXISTS procedure_name

下面是使用實例:

mysql>drop procedure if exists proced;

修改存儲過程

存儲過程的修改時不能改變存儲過程內的sql語句的,只能改變其屬性,其語法如下:

ALTER PROCEDURE proc_name [characteristic ...]characteristic:  COMMENT 'string'  | LANGUAGE SQL  | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA }  | SQL SECURITY { DEFINER | INVOKER }

總結:無論是刪除存儲過程還是修改存儲過程,必須保證你要修改或者刪除存儲過程沒有被其他存儲過程使用,例如你有存儲過程A,和存儲過程B。A在B中被使用,如果我們想修改A或者刪除A,必須確保B中不再使用A,否則如果我們刪除A以后,再調用B的時候就會報錯。

舉個例子:

mysql>delimiter //mysql>create procedure A(IN pa1 INT,OUT pa2 INT)     -->begin     -->select count(*) into pa2 from proced where id>pa1;     -->end     -->//mysql>create procedure B(INOUT pa INT)     -->begin     -->declare v int;     -->call A(pa,v);     -->set pa = v;     -->end     -->//mysql>delimiter ;mysql>drop procedure A;mysql>set @a=5;mysql>call B(@a);ERROR 1305 (42000): PROCEDURE test.A does not exists

以上就是對存儲過程簡單的介紹,希望對大家學習mysql存儲過程有所幫助。



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
日韩男女性生活视频| 国产啪精品视频| 色七七影院综合| 日韩成人中文字幕在线观看| 成人综合网网址| 欧美性猛交xxxx富婆弯腰| 亚洲美女久久久| 国产精品99免视看9| 91麻豆国产语对白在线观看| 亚洲精品国产精品自产a区红杏吧| 97视频免费在线观看| 欧洲一区二区视频| 精品一区二区三区四区在线| 日韩免费看的电影电视剧大全| 日韩欧美亚洲范冰冰与中字| 亚洲自拍偷拍福利| 97精品视频在线观看| 久久成人一区二区| 久久精品美女视频网站| 亚洲欧美在线第一页| 91精品久久久久久| 国产一区二区三区三区在线观看| 在线亚洲欧美视频| 亚洲国产又黄又爽女人高潮的| 欧美日韩xxxxx| 久久影院资源网| 国内揄拍国内精品少妇国语| 成人精品久久av网站| 成人在线视频福利| 欧美激情精品久久久久久大尺度| 亚洲精品小视频在线观看| 国产精品国产三级国产aⅴ9色| 成人免费大片黄在线播放| 色诱女教师一区二区三区| 亚洲国产精品字幕| 日韩电影大片中文字幕| 久操成人在线视频| 亚洲iv一区二区三区| 亚洲bt天天射| 色综合视频网站| 日韩在线视频网| 亚洲自拍在线观看| 亚洲电影免费观看高清完整版在线| 亚洲品质视频自拍网| 欧美性生交xxxxxdddd| 亚洲欧洲国产伦综合| 最近2019中文字幕一页二页| 91久久久在线| 国产精品美乳在线观看| 日韩成人中文电影| 亚洲风情亚aⅴ在线发布| 亚洲精品黄网在线观看| 久久免费国产精品1| 欧美日韩一二三四五区| 亚洲人成电影网站色xx| 中文字幕亚洲天堂| 亚洲国产成人在线播放| 超薄丝袜一区二区| 日韩精品视频三区| 日韩av在线影视| 久久久久久久久亚洲| 91精品91久久久久久| 国产日韩欧美夫妻视频在线观看| 色哟哟亚洲精品一区二区| 激情av一区二区| 国产一区二区三区直播精品电影| 91精品国产高清久久久久久| 亚洲欧美日韩久久久久久| yellow中文字幕久久| 精品一区二区三区四区| 国产一区二区黄| 日韩美女在线观看一区| 久久免费少妇高潮久久精品99| 国产精品直播网红| 久久久久亚洲精品国产| 最新的欧美黄色| 国产在线观看精品| 亚洲成人久久网| 国产男女猛烈无遮挡91| 精品久久久久久国产| 色婷婷成人综合| 欧美色视频日本版| 久久成人国产精品| 久青草国产97香蕉在线视频| 国产亚洲精品va在线观看| 久久亚洲欧美日韩精品专区| 久久久精品久久| 国产精品第8页| 97超级碰碰人国产在线观看| 26uuu日韩精品一区二区| 欧美日韩亚洲视频一区| 欧美中文字幕视频在线观看| 国产日本欧美在线观看| 日韩中文在线观看| 日韩欧美亚洲国产一区| 欧美国产在线电影| 久久久久久久久网站| 亚洲人成网站999久久久综合| 欧洲美女免费图片一区| 欧美日韩中文字幕在线| 欧美疯狂xxxx大交乱88av| 欧美在线xxx| 亚洲精品免费网站| 视频一区视频二区国产精品| 国产成人在线亚洲欧美| 国产精品稀缺呦系列在线| 久久国产精品久久久久久| 亚洲欧美精品suv| 亚洲大胆人体在线| 久久久久久久国产精品视频| 日韩中文字幕免费视频| 久久久精品欧美| 欧美性受xxxx黑人猛交| 日韩中文在线视频| 在线播放日韩精品| 欧美肥臀大乳一区二区免费视频| 日韩中文av在线| 国产精品视频久久久久| 欧美精品久久一区二区| 17婷婷久久www| 亚洲天堂免费在线| 精品视频久久久| 国产精品网址在线| 国产精品欧美日韩一区二区| 中文字幕欧美日韩精品| 国内精品久久久久伊人av| 中文字幕欧美日韩精品| 国产亚洲精品一区二区| 久久久久久久久网站| 日韩免费在线看| 国模gogo一区二区大胆私拍| 狠狠色狠狠色综合日日五| 色偷偷av亚洲男人的天堂| 亚洲一区二区三区在线免费观看| 久久男人av资源网站| 欧美重口另类videos人妖| 久久久久久久激情视频| 国产精品福利久久久| 色妞色视频一区二区三区四区| 欧美日韩亚洲系列| 97在线免费视频| 欧美专区日韩视频| 国产精品久在线观看| 欧美日韩国产麻豆| 91av视频在线观看| 在线精品视频视频中文字幕| 久久久女人电视剧免费播放下载| 中文字幕日韩在线播放| 97精品久久久中文字幕免费| 欧美第一页在线| 日韩av免费在线看| 91人成网站www| 一区二区三区视频观看| 久久久最新网址| 国产精品色悠悠| 久久精品这里热有精品| 1769国内精品视频在线播放| 国产成人一区二区三区| 91av在线国产| 亚洲人成网在线播放| 亚洲天堂免费在线| 日韩的一区二区| 欧美亚洲视频在线看网址| 国产国语videosex另类|