国产精品电影_久久视频免费_欧美日韩国产激情_成年人视频免费在线播放_日本久久亚洲电影_久久都是精品_66av99_九色精品美女在线_蜜臀a∨国产成人精品_冲田杏梨av在线_欧美精品在线一区二区三区_麻豆mv在线看

一看就懂的MySQL存儲(chǔ)過(guò)程詳解

存儲(chǔ) 存儲(chǔ)軟件 MySQL
我們常用的操作數(shù)據(jù)庫(kù)語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它。

[[244976]]

圖片來(lái)自包圖網(wǎng)

1. 存儲(chǔ)過(guò)程簡(jiǎn)介

我們常用的操作數(shù)據(jù)庫(kù)語(yǔ)言SQL語(yǔ)句在執(zhí)行的時(shí)候需要要先編譯,然后執(zhí)行,而存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶通過(guò)指定存儲(chǔ)過(guò)程的名字并給定參數(shù)(如果該存儲(chǔ)過(guò)程帶有參數(shù))來(lái)調(diào)用執(zhí)行它。

一個(gè)存儲(chǔ)過(guò)程是一個(gè)可編程的函數(shù),它在數(shù)據(jù)庫(kù)中創(chuàng)建并保存。它可以有SQL語(yǔ)句和一些特殊的控制結(jié)構(gòu)組成。當(dāng)希望在不同的應(yīng)用程序或平臺(tái)上執(zhí)行相同的函數(shù),或者封裝特定功能時(shí),存儲(chǔ)過(guò)程是非常有用的。數(shù)據(jù)庫(kù)中的存儲(chǔ)過(guò)程可以看做是對(duì)編程中面向?qū)ο蠓椒ǖ哪M。它允許控制數(shù)據(jù)的訪問(wèn)方式。

存儲(chǔ)過(guò)程通常有以下優(yōu)點(diǎn):

(1).存儲(chǔ)過(guò)程增強(qiáng)了SQL語(yǔ)言的功能和靈活性。存儲(chǔ)過(guò)程可以用流控制語(yǔ)句編寫,有很強(qiáng)的靈活性,可以完成復(fù)雜的判斷和較復(fù)雜的運(yùn)算。

(2).存儲(chǔ)過(guò)程允許標(biāo)準(zhǔn)組件是編程。存儲(chǔ)過(guò)程被創(chuàng)建后,可以在程序中被多次調(diào)用,而不必重新編寫該存儲(chǔ)過(guò)程的SQL語(yǔ)句。而且數(shù)據(jù)庫(kù)專業(yè)人員可以隨時(shí)對(duì)存儲(chǔ)過(guò)程進(jìn)行修改,對(duì)應(yīng)用程序源代碼毫無(wú)影響。

(3).存儲(chǔ)過(guò)程能實(shí)現(xiàn)較快的執(zhí)行速度。如果某一操作包含大量的Transaction-SQL代碼或分別被多次執(zhí)行,那么存儲(chǔ)過(guò)程要比批處理的執(zhí)行速度快很多。因?yàn)榇鎯?chǔ)過(guò)程是預(yù)編譯的。在首次運(yùn)行一個(gè)存儲(chǔ)過(guò)程時(shí)查詢,優(yōu)化器對(duì)其進(jìn)行分析優(yōu)化,并且給出最終被存儲(chǔ)在系統(tǒng)表中的執(zhí)行計(jì)劃。而批處理的Transaction-SQL語(yǔ)句在每次運(yùn)行時(shí)都要進(jìn)行編譯和優(yōu)化,速度相對(duì)要慢一些。

(4).存儲(chǔ)過(guò)程能過(guò)減少網(wǎng)絡(luò)流量。針對(duì)同一個(gè)數(shù)據(jù)庫(kù)對(duì)象的操作(如查詢、修改),如果這一操作所涉及的Transaction-SQL語(yǔ)句被組織程存儲(chǔ)過(guò)程,那么當(dāng)在客戶計(jì)算機(jī)上調(diào)用該存儲(chǔ)過(guò)程時(shí),網(wǎng)絡(luò)中傳送的只是該調(diào)用語(yǔ)句,從而大大增加了網(wǎng)絡(luò)流量并降低了網(wǎng)絡(luò)負(fù)載。

(5).存儲(chǔ)過(guò)程可被作為一種安全機(jī)制來(lái)充分利用。系統(tǒng)管理員通過(guò)執(zhí)行某一存儲(chǔ)過(guò)程的權(quán)限進(jìn)行限制,能夠?qū)崿F(xiàn)對(duì)相應(yīng)的數(shù)據(jù)的訪問(wèn)權(quán)限的限制,避免了非授權(quán)用戶對(duì)數(shù)據(jù)的訪問(wèn),保證了數(shù)據(jù)的安全。

2. 關(guān)于MySQL的存儲(chǔ)過(guò)程

存儲(chǔ)過(guò)程是數(shù)據(jù)庫(kù)存儲(chǔ)的一個(gè)重要的功能,但是MySQL在5.0以前并不支持存儲(chǔ)過(guò)程,這使得MySQL在應(yīng)用上大打折扣。好在MySQL 5.0終于開(kāi)始已經(jīng)支持存儲(chǔ)過(guò)程,這樣即可以大大提高數(shù)據(jù)庫(kù)的處理速度,同時(shí)也可以提高數(shù)據(jù)庫(kù)編程的靈活性。

3. MySQL存儲(chǔ)過(guò)程的創(chuàng)建

(1). 格式

MySQL存儲(chǔ)過(guò)程創(chuàng)建的格式:CREATE PROCEDURE 過(guò)程名 ([過(guò)程參數(shù)[,...]])

[特性 ...] 過(guò)程體

這里先舉個(gè)例子

  1. mysql> DELIMITER // 
  2.  
  3. mysql> CREATE PROCEDURE proc1(OUT s int
  4.  
  5. -> BEGIN 
  6.  
  7. -> SELECT COUNT(*) INTO s FROM user
  8.  
  9. -> END 
  10.  
  11. -> // 
  12.  
  13. mysql> DELIMITER ; 
  1. 這里需要注意的是DELIMITER //和DELIMITER ;兩句,DELIMITER是分割符的意思,因?yàn)镸ySQL默認(rèn)以";"為分隔符,如果我們沒(méi)有聲明分割符,那么編譯器會(huì)把存儲(chǔ)過(guò)程當(dāng)成SQL語(yǔ)句進(jìn)行處理,則存儲(chǔ)過(guò)程的編譯過(guò)程會(huì)報(bào)錯(cuò),所以要事先用DELIMITER關(guān)鍵字申明當(dāng)前段分隔符,這樣MySQL才會(huì)將";"當(dāng)做存儲(chǔ)過(guò)程中的代碼,不會(huì)執(zhí)行這些代碼,用完了之后要把分隔符還原。
  2. 存儲(chǔ)過(guò)程根據(jù)需要可能會(huì)有輸入、輸出、輸入輸出參數(shù),這里有一個(gè)輸出參數(shù)s,類型是int型,如果有多個(gè)參數(shù)用","分割開(kāi)。
  3. 過(guò)程體的開(kāi)始與結(jié)束使用BEGIN與END進(jìn)行標(biāo)識(shí)。

這樣,我們的一個(gè)MySQL存儲(chǔ)過(guò)程就完成了,是不是很容易呢?看不懂也沒(méi)關(guān)系,接下來(lái),我們?cè)敿?xì)的講解。

(2). 聲明分割符

其實(shí),關(guān)于聲明分割符,上面的注解已經(jīng)寫得很清楚,不需要多說(shuō),只是稍微要注意一點(diǎn)的是:如果是用MySQL的Administrator管理工具時(shí),可以直接創(chuàng)建,不再需要聲明。

(3). 參數(shù)

MySQL存儲(chǔ)過(guò)程的參數(shù)用在存儲(chǔ)過(guò)程的定義,共有三種參數(shù)類型,IN,OUT,INOUT,形式如:

CREATE PROCEDURE([[IN |OUT |INOUT ] 參數(shù)名 數(shù)據(jù)類形...])

IN 輸入?yún)?shù):表示該參數(shù)的值必須在調(diào)用存儲(chǔ)過(guò)程時(shí)指定,在存儲(chǔ)過(guò)程中修改該參數(shù)的值不能被返回,為默認(rèn)值

OUT 輸出參數(shù):該值可在存儲(chǔ)過(guò)程內(nèi)部被改變,并可返回

INOUT 輸入輸出參數(shù):調(diào)用時(shí)指定,并且可被改變和返回

Ⅰ. IN參數(shù)例子

創(chuàng)建:

  1. mysql > DELIMITER // 
  2. mysql > CREATE PROCEDURE demo_in_parameter(IN p_in int
  3. -> BEGIN 
  4. -> SELECT p_in; 
  5. -> SET p_in=2; 
  6. -> SELECT p_in; 
  7. -> END
  8. -> // 
  9. mysql > DELIMITER ; 

執(zhí)行結(jié)果:

  1. mysql > SET @p_in=1; 
  2. mysql > CALL demo_in_parameter(@p_in); 
  3. +------+ 
  4. | p_in | 
  5. +------+ 
  6. | 1 | 
  7. +------+ 
  8. +------+ 
  9. | p_in | 
  10. +------+ 
  11. | 2 | 
  12. +------+ 
  13. mysql> SELECT @p_in; 
  14. +-------+ 
  15. | @p_in | 
  16. +-------+ 
  17. | 1 | 
  18. +-------+ 

以上可以看出,p_in雖然在存儲(chǔ)過(guò)程中被修改,但并不影響@p_id的值

Ⅱ.OUT參數(shù)例子

創(chuàng)建:

  1. mysql > DELIMITER // 
  2. mysql > CREATE PROCEDURE demo_out_parameter(OUT p_out int
  3. -> BEGIN 
  4. -> SELECT p_out; 
  5. -> SET p_out=2; 
  6. -> SELECT p_out; 
  7. -> END
  8. -> // 
  9. mysql > DELIMITER ; 

執(zhí)行結(jié)果:

  1. mysql > SET @p_out=1; 
  2. mysql > CALL sp_demo_out_parameter(@p_out); 
  3. +-------+ 
  4. | p_out | 
  5. +-------+ 
  6. NULL | 
  7. +-------+ 
  8. +-------+ 
  9. | p_out | 
  10. +-------+ 
  11. | 2 | 
  12. +-------+ 
  13. mysql> SELECT @p_out; 
  14. +-------+ 
  15. | p_out | 
  16. +-------+ 
  17. | 2 | 
  18. +-------+ 

Ⅲ. INOUT參數(shù)例子

創(chuàng)建:

  1. mysql > DELIMITER // 
  2. mysql > CREATE PROCEDURE demo_inout_parameter(INOUT p_inout int
  3. -> BEGIN 
  4. -> SELECT p_inout; 
  5. -> SET p_inout=2; 
  6. -> SELECT p_inout; 
  7. -> END
  8. -> // 
  9. mysql > DELIMITER ; 

執(zhí)行結(jié)果:

  1. mysql > SET @p_inout=1; 
  2. mysql > CALL demo_inout_parameter(@p_inout) ; 
  3. +---------+ 
  4. | p_inout | 
  5. +---------+ 
  6. | 1 | 
  7. +---------+ 
  8. +---------+ 
  9. | p_inout | 
  10. +---------+ 
  11. | 2 | 
  12. +---------+ 
  13. mysql > SELECT @p_inout; 
  14. +----------+ 
  15. | @p_inout | 
  16. +----------+ 
  17. | 2 | 
  18. +----------+ 

(4). 變量

Ⅰ. 變量定義

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

其中,datatype為MySQL的數(shù)據(jù)類型,如:int, float, date, varchar(length)

例如:

  1. DECLARE l_int int unsigned default 4000000;
  2. DECLARE l_numeric number(8,2) DEFAULT 9.95;
  3. DECLARE l_date date DEFAULT '1999-12-31';
  4. DECLARE l_datetime datetime DEFAULT '1999-12-31 23:59:59';
  5. DECLARE l_varchar varchar(255) DEFAULT 'This will not be padded';

Ⅱ. 變量賦值 SET 變量名 = 表達(dá)式值 [,variable_name = expression ...]

Ⅲ. 用戶變量

ⅰ. 在MySQL客戶端使用用戶變量

  1. mysql > SELECT 'Hello World' into @x; 
  2. mysql > SELECT @x; 
  3. +-------------+ 
  4. | @x | 
  5. +-------------+ 
  6. | Hello World | 
  7. +-------------+ 
  8. mysql > SET @y='Goodbye Cruel World'
  9. mysql > SELECT @y; 
  10. +---------------------+ 
  11. | @y | 
  12. +---------------------+ 
  13. | Goodbye Cruel World | 
  14. +---------------------+ 
  15. mysql > SET @z=1+2+3; 
  16. mysql > SELECT @z; 
  17. +------+ 
  18. | @z | 
  19. +------+ 
  20. | 6 | 
  21. +------+ 

ⅱ. 在存儲(chǔ)過(guò)程中使用用戶變量

  1. mysql > CREATE PROCEDURE GreetWorld( ) SELECT CONCAT(@greeting,' World'); 
  2. mysql > SET @greeting='Hello'
  3. mysql > CALL GreetWorld( ); 
  4. +----------------------------+ 
  5. | CONCAT(@greeting,' World') | 
  6. +----------------------------+ 
  7. | Hello World | 
  8. +----------------------------+ 

ⅲ. 在存儲(chǔ)過(guò)程間傳遞全局范圍的用戶變量

  1. mysql> CREATE PROCEDURE p1() SET @last_procedure='p1'
  2. mysql> CREATE PROCEDURE p2() SELECT CONCAT('Last procedure was ',@last_proc); 
  3. mysql> CALL p1( ); 
  4. mysql> CALL p2( ); 
  5. +-----------------------------------------------+ 
  6. | CONCAT('Last procedure was ',@last_proc | 
  7. +-----------------------------------------------+ 
  8. Last procedure was p1 | 
  9. +-----------------------------------------------+ 
責(zé)任編輯:武曉燕 來(lái)源: 今日頭條
相關(guān)推薦

2023-05-12 09:08:48

TypeScript工具類型

2020-09-21 08:33:12

線程池調(diào)度Thread Pool

2020-04-15 08:33:43

Netty網(wǎng)絡(luò)通信

2021-07-15 09:55:47

systemdLinux文件

2020-03-27 09:06:54

選擇排序算法冒泡排序

2021-05-14 07:11:49

方法調(diào)用類加載

2022-08-15 19:49:57

Consul架構(gòu)注冊(cè)中心

2022-05-29 22:55:00

適配器設(shè)計(jì)模式

2021-12-30 09:10:28

游戲開(kāi)發(fā)開(kāi)發(fā)技術(shù)熱點(diǎn)

2019-08-14 10:20:32

算法數(shù)組鏈表

2019-01-15 09:55:24

RAID磁盤陣列數(shù)據(jù)存儲(chǔ)

2020-05-09 14:40:29

UI設(shè)計(jì)開(kāi)發(fā)

2025-03-04 02:00:00

Python編寫自動(dòng)化

2015-07-21 13:07:14

Reactjs教程

2024-12-12 08:22:03

負(fù)載均衡算法無(wú)狀態(tài)

2024-11-20 16:02:47

.NET 9LINQ開(kāi)發(fā)

2021-05-13 07:30:27

Kafka消息流系統(tǒng)

2021-01-07 10:30:23

設(shè)計(jì)模式

2019-08-22 09:22:44

數(shù)據(jù)結(jié)構(gòu)二叉搜索樹(shù)

2020-11-26 10:33:44

MySQL存儲(chǔ)函數(shù)
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

中文字幕一区二区三区乱码图片 | 官网99热精品| 亚洲一区一卡| 欧美牲交a欧美牲交aⅴ免费下载| 色综合天天综合给合国产| 福利一区二区| 成人综合网网址| 久久久久88色偷偷免费| 欧美性天天影视| 91精品国产沙发| 国产一区二区三区免费| 国产乱视频在线观看| 九九九久久国产免费| 日韩不卡一区二区三区| 在线观看国产麻豆| 欧美日韩第一页| 精品在线一区二区三区| 伊人国产在线看一| 欧美国产日本高清在线 | 亚洲精品aⅴ| 日韩.欧美.亚洲| 天天免费综合色| 亚洲91网站| 小说区视频区图片区| 欧美在线你懂得| 欧美伦理在线视频| 日本免费观看网站| 色多多国产成人永久免费网站| 国产精品婷婷| 新欧美整片sss第一页| 欧美日本黄视频| 国产精品中文字幕欧美| 成人黄色网址| 亚洲a在线播放| 亚洲激情图片qvod| 99久久免费精品国产72精品九九| 久久亚洲国产成人精品无码区| 91精品视频网| 国内精品嫩模av私拍在线观看| 日本最黄视频| 88xx成人精品| 国产精品免费视频网站| 日韩精品成人在线观看| 人人妻人人添人人爽欧美一区| 亚洲人精品午夜在线观看| 日韩电影在线一区二区三区| 1769视频在线播放免费观看| 91久久国产综合久久蜜月精品 | 欧美视频在线播放一区| 日韩av在线不卡| 捆绑调教美女网站视频一区| 欧美一区二区三区在线观看视频 | 亚洲国产成人在线视频| 亚洲看片免费| 国产一级网站视频在线| 91日本视频在线| 亚洲成a人v欧美综合天堂下载 | 亚洲激情在线视频| 日本伊人精品一区二区三区观看方式| 91在线不卡| 国产日韩一区欧美| 欧美亚洲动漫另类| 精品不卡视频| 欧美一级二级三级区| 精品不卡在线| 欧美一区在线视频| 日韩精品免费视频人成| 国产啊啊啊视频在线观看| 视频一区二区三区在线观看| 欧美mv和日韩mv的网站| 蜜臀av亚洲一区中文字幕| 国产美女精品写真福利视频| 中文字幕久精品免| 国产一区二区日韩| av福利精品导航| youjizzjizz亚洲| 500福利第一精品导航| 成人免费自拍视频| 欧美日韩一本到| 美女精品一区二区| 成人福利一区二区| 久久久精品三级| 国产成人精品在线播放| 日韩欧美aⅴ综合网站发布| 亚洲乱码久久| 伊人色综合一区二区三区影院视频| 男人插女人视频在线观看| 国内精品400部情侣激情| 一区二区三区四区亚洲| 97久久视频| a级片国产精品自在拍在线播放| 18视频在线观看娇喘| 欧美国产亚洲精品久久久8v| 亚洲国产人成综合网站| 亚洲免费综合| 日韩成人在线电影| 少妇高潮露脸国语对白| 国产在线一区二区三区欧美 | 在线视频精品一| 亚洲欧洲日韩综合一区二区| 亚洲精品99| 国产高清自产拍av在线| 天天爱天天操天天干| 91亚洲精品一区| 亚洲精品久久久久久下一站| 国产色婷婷亚洲99精品小说| 永久91嫩草亚洲精品人人| 第一福利在线视频| av首页在线| 秋霞毛片久久久久久久久| 久久精品中文字幕| 午夜欧美一区二区三区在线播放| 久久九九免费| 精品国产一区二区三区2021| 色资源网在线观看| 亚洲乱码一区二区三区| 久久久亚洲精品视频| 欧美日韩久久久一区| 成人美女视频在线观看18| 色135综合网| 欧美成人h版| 91九色porny在线| 国产四区在线观看| 国产精品99久久久久久www| 欧美成人一区二区| 国产精品夫妻自拍| 免费精品视频最新在线| 猛男gaygay欧美视频| 成人免费一区二区三区牛牛| 可以看美女隐私的网站| 在线亚洲美日韩| 国产精品普通话| 亚洲天堂成人在线视频| 欧美性xxxx极品hd满灌| 97se亚洲国产综合自在线| 亚洲国产精品综合久久久| 丁香久久综合| www.视频在线.com| 成人性生生活性生交12| 少妇免费毛片久久久久久久久 | 黑人一区二区三区| 国产高清在线看| 小泽玛利亚视频在线观看| 亚洲国产一区二区三区在线播| 国产91精品在线播放| 在线观看日韩欧美| 777色狠狠一区二区三区| 亚洲精品乱码久久久久久日本蜜臀| 久久精品久久综合| 欧美激情1区2区3区| 欧美激情极品| av有声小说一区二区三区| 欧美精品videos另类| 麻豆电影传媒二区| 男女激情无遮挡| 亚洲.欧美.日本.国产综合在线 | jiyouzz国产精品久久| 国产日韩欧美一区| 国产不卡精品在线| a级大胆欧美人体大胆666| 欧洲一级在线观看| www.成人精品免费网站青椒| 毛片在线视频播放| 91制片厂免费观看| 奇米精品在线| 国产视频99| 91色中文字幕| 国产va免费精品高清在线观看| 久久亚洲综合国产精品99麻豆精品福利 | 91香蕉视频网址| 精品午夜一区二区三区| 国产欧美久久一区二区| 68精品久久久久久欧美| xxav国产精品美女主播| 国产视频久久网| 亚洲精品一区二区三区精华液| 欧美人妇做爰xxxⅹ性高电影| 亚洲h精品动漫在线观看| 亚洲私人影院在线观看| 久久婷婷久久一区二区三区| 国产福利一区二区三区视频在线| 久久中文在线| 久久亚洲国产精品一区二区| 在线观看一区视频| 激情欧美日韩| 午夜久久美女| 91成人网在线观看| 亚洲欧美综合久久久| 天天做综合网| 亚洲xxx拳头交| 欧美精品大片| 综合色一区二区| 影音国产精品| 亚洲青色在线| 久久黄色影院| 男男视频亚洲欧美| 国产一区二区精品在线观看| 国产91色综合久久免费分享| 不卡的看片网站| 欧美国产精品专区|