Mysql的 存儲(chǔ)過(guò)程procedure及具體案例
什么是存儲(chǔ)過(guò)程
存儲(chǔ)過(guò)程(Stored Procedure)是一組為了完成特定功能的SQL語(yǔ)句集合,經(jīng)編譯后存儲(chǔ)在數(shù)據(jù)庫(kù)中,用戶(hù)通過(guò)指定存儲(chǔ)過(guò)程的名字和參數(shù)(如果有)來(lái)執(zhí)行它。存儲(chǔ)過(guò)程可以在很多數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)中找到,如SQL Server、Oracle、MySQL等。
存儲(chǔ)過(guò)程的好處:
- 代碼重用:存儲(chǔ)過(guò)程允許你編寫(xiě)一次代碼,然后在多個(gè)地方重復(fù)使用。
- 簡(jiǎn)化操作:對(duì)于復(fù)雜的數(shù)據(jù)庫(kù)操作,可以將這些操作封裝在存儲(chǔ)過(guò)程中,用戶(hù)只需調(diào)用存儲(chǔ)過(guò)程即可。
- 提高性能:存儲(chǔ)過(guò)程在首次執(zhí)行時(shí)會(huì)進(jìn)行編譯和優(yōu)化,后續(xù)的調(diào)用會(huì)重用這些編譯后的代碼,從而提高性能。
- 安全性:通過(guò)存儲(chǔ)過(guò)程,你可以限制對(duì)基礎(chǔ)表的直接訪問(wèn),只允許通過(guò)預(yù)定義的、受控的接口進(jìn)行訪問(wèn)。
- 集中管理:所有的數(shù)據(jù)庫(kù)操作邏輯都存儲(chǔ)在數(shù)據(jù)庫(kù)中,使得管理和維護(hù)更加容易
使用存儲(chǔ)過(guò)程需要注意的是 :
1. declare語(yǔ)句只能放在存儲(chǔ)過(guò)程的開(kāi)始位置,放在后面就會(huì)報(bào)錯(cuò)
2. if 語(yǔ)句的后面必須有then,但是不需要begin,在if結(jié)束時(shí)需要end if
3. 判斷是否為NULL倒是和MSSQL一樣都有IS NULL
4. delimiter是定界符的意思在結(jié)束的end后面要添加定界符
5. end if之后必須跟分號(hào),否則語(yǔ)法錯(cuò)誤
6. while后面跟條件,條件后面要跟一個(gè)do,在while循環(huán)體結(jié)束之后需要end while并以分號(hào)結(jié)束。
7. in 表入?yún)?默認(rèn)) , out 表出參 , inout 表出入?yún)?br />8. 兩種賦值方式: set ,select into
SELECT id,data INTO x,y FROM test.t1 LIMIT 1;
SET a = 0;
具體案例:
1. 基本案例
-- 代碼 DELIMITER $$ CREATE PROCEDURE test1(IN ss VARCHAR(100)) BEGIN SELECT ss ; END $$ -- 調(diào)用 SET @s1 = '你好' ; CALL test1(@s1) ; --
2. 帶出參案例
-- 代碼
DELIMITER $$ CREATE PROCEDURE testproce(IN score INT,OUT rs VARCHAR(200)) BEGIN DECLARE sc INT; SET sc = score ; IF sc < 0 OR sc > 100 THEN SET rs = 'score error'; ELSEIF sc > 80 THEN SET rs = 'A'; ELSEIF sc > 60 THEN SET rs = 'B'; ELSE SET rs = 'C'; END IF ; END $$
-- 調(diào)用 SET @a1 =60; SET @a2 = ''; CALL testproce(@a1,@a2); SELECT @a2 ; --
3.while的簡(jiǎn)單應(yīng)用
-- 代碼
DELIMITER $$ CREATE PROCEDURE proc_add_looply(IN $className VARCHAR(200),INOUT $insertTimes INT) BEGIN WHILE $insertTimes>0 DO INSERT INTO classes VALUES(DEFAULT,$className); SET $insertTimes = $insertTimes - 1 ; END WHILE; COMMIT; END $$
-- 調(diào)用 SET @lp_1 = '班' ; SET @lp_2 = 5 ; CALL proc_add_looply(@lp_1,@lp_2); --
4.用數(shù)據(jù)庫(kù)中的數(shù)據(jù)賦值
-- 代碼
DELIMITER $$ CREATE PROCEDURE show_job_dept(IN no2 INT,OUT job2 VARCHAR(100),OUT dno2 INT) BEGIN SELECT job,deptno INTO job2,dno2 FROM emp WHERE EMPNO = no2; END $$
-- 調(diào)用 SET @sjd_1 = 7369; SET @sjd_2 = ''; SET @sjd_3 = 0; CALL show_job_dept(@sjd_1,@sjd_2,@sjd_3); SELECT @sjd_2 ; SELECT @sjd_3 ; --
到此這篇關(guān)于Mysql的 存儲(chǔ)過(guò)程(procedure)的文章就介紹到這了,更多相關(guān)Mysql 存儲(chǔ)過(guò)程內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- MySQL數(shù)據(jù)庫(kù)之存儲(chǔ)過(guò)程?procedure
- mysql存儲(chǔ)過(guò)程之創(chuàng)建(CREATE PROCEDURE)和調(diào)用(CALL)及變量創(chuàng)建(DECLARE)和賦值(SET)操作方法
- 一步步教你利用Mysql存儲(chǔ)過(guò)程造百萬(wàn)級(jí)數(shù)據(jù)
- MySQL存儲(chǔ)過(guò)程的創(chuàng)建使用以及實(shí)現(xiàn)數(shù)據(jù)快速插入
- MySQL利用procedure analyse()函數(shù)優(yōu)化表結(jié)構(gòu)
相關(guān)文章
mysql數(shù)據(jù)庫(kù)添加用戶(hù)及分配權(quán)限具體實(shí)現(xiàn)
這篇文章主要介紹了mysql數(shù)據(jù)庫(kù)添加用戶(hù)及分配權(quán)限的方法,需要的朋友可以參考下2014-02-02MySQL關(guān)于sql_mode解析與設(shè)置講解
今天小編就為大家分享一篇關(guān)于MySQL關(guān)于sql_mode解析與設(shè)置講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧2019-03-03CentOS6.9下mysql 5.7.17安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS6.9下mysql 5.7.17安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-10-10mysqld_multi在Linux服務(wù)器上運(yùn)行多個(gè)MySQL實(shí)例
在Linux系統(tǒng)上使用mysqld_multi來(lái)啟動(dòng)和管理多個(gè)MySQL實(shí)例是一種常見(jiàn)的做法,這種方式允許你在同一臺(tái)機(jī)器上運(yùn)行多個(gè)MySQL服務(wù),每個(gè)服務(wù)可以有不同的配置和數(shù)據(jù)目錄,這篇文章展示如何設(shè)置和使用mysqld_multi來(lái)啟動(dòng)多個(gè)MySQL實(shí)例2025-02-02MySQL中表復(fù)制:create table like 與 create table as select
這篇文章主要介紹了MySQL中表復(fù)制:create table like 與 create table as select,需要的朋友可以參考下2014-12-12MySQL 導(dǎo)出數(shù)據(jù)為csv格式的方法
這篇文章主要介紹了MySQL 導(dǎo)出數(shù)據(jù)為csv格式的方法,需要的朋友可以參考下2015-10-10CentOS7.3下mysql 8.0.13安裝配置方法圖文教程
這篇文章主要為大家詳細(xì)介紹了CentOS7.3下mysql 8.0.13安裝配置方法圖文教程,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-11-11MySQL中REPLACE INTO和INSERT INTO的區(qū)別分析
REPLACE的運(yùn)行與INSERT很相似。只有一點(diǎn)例外,假如表中的一個(gè)舊記錄與一個(gè)用于PRIMARY KEY或一個(gè)UNIQUE索引的新記錄具有相同的值,則在新記錄被插入之前,舊記錄被刪除。2011-07-07MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用架構(gòu)之MHA的實(shí)戰(zhàn)
本文主要介紹了MySQL數(shù)據(jù)庫(kù)實(shí)現(xiàn)高可用架構(gòu)之MHA的實(shí)戰(zhàn),文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-02-02MySQL實(shí)現(xiàn)批量插入測(cè)試數(shù)據(jù)的方式總結(jié)
在開(kāi)發(fā)過(guò)程中經(jīng)常需要一些測(cè)試數(shù)據(jù),?這個(gè)時(shí)候如果手敲的話,?十行二十行還好,?多了就很死亡了,?接下來(lái)介紹兩種常用的MySQL測(cè)試數(shù)據(jù)批量生成方式,希望對(duì)大家有所幫助2023-05-05