MySQL:MySQL 儲存過程
阿新 • • 發佈:2021-07-17
MySQL 儲存過程(瞭解)
1 什麼是儲存過程
- MySQL 5.0 版本開始支援儲存過程
- 儲存過程(Stored Procedure)是一種在資料庫中儲存複雜程式,以便外部程式呼叫的一種資料 庫物件。
- 儲存過程是為了完成特定功能的SQL語句集,經編譯建立並儲存在資料庫中,使用者可通過 指定儲存過程的名字並給定引數(需要時)來呼叫執行。
- 簡單理解: 儲存過程其實就是一堆 SQL 語句的合併。中間加入了一些邏輯控制
2 儲存過程的優缺點
優點:
<1>儲存過程一旦除錯完成後,就可以穩定執行,(前提是,業務需求要相對穩定,沒有變化)
<2>儲存過程減少業務系統與資料庫的互動,降低耦合,資料庫互動更加快捷(應用伺服器,與 資料庫伺服器不在同一個地區)
缺點:
<1>在網際網路行業中,大量使用MySQL,MySQL的儲存過程與Oracle的相比較弱,所以較少使用,並且網際網路行業需求變化較快也是原因之一
<2>儘量在簡單的邏輯中使用,儲存過程移植十分困難,資料庫叢集環境,保證各個庫之間儲存 過程變更一致也十分困難。
<3>阿里的程式碼規範裡也提出了禁止使用儲存過程,儲存過程維護起來的確麻煩;
3 儲存過程的建立方式
方式1
1) 資料準備
建立商品表 與 訂單表
# 商品表 CREATE TABLE goods( gid INT, NAME VARCHAR(20), num INT-- 庫存 );
#訂單表 CREATE TABLE orders( oid INT, gid INT, price INT -- 訂單價格 );
# 向商品表中新增3條資料 INSERT INTO goods VALUES(1,'奶茶',20); INSERT INTO goods VALUES(2,'綠茶',100); INSERT INTO goods VALUES(3,'花茶',25)
2) 建立簡單的儲存過程
語法格式
DELIMITER $$ -- 宣告語句結束符,可以自定義 一般使用$$ CREATE PROCEDURE 過程名稱() -- 宣告儲存過程 BEGIN -- 開始編寫儲存過程-- 要執行的操作 END $$ -- 儲存過程結束
需求: 編寫儲存過程, 查詢所有商品資料
DELIMITER $$ CREATE PROCEDURE goods_proc() BEGIN select * from goods; END $$
3) 呼叫儲存過程
語法格式
call 儲存過程名
-- 呼叫儲存過程 查詢goods表所有資料 call goods_proc;
方式2
1) IN 輸入引數:表示呼叫者向儲存過程傳入值
CREATE PROCEDURE 儲存過程名稱(IN 引數名 引數型別)
2) 建立接收引數的儲存過程
需求: 接收一個商品id, 根據id刪除資料
DELIMITER $$ CREATE PROCEDURE goods_proc02(IN goods_id INT) BEGIN DELETE FROM goods WHERE gid = goods_id ; END $$
3) 呼叫儲存過程 傳遞引數
# 刪除 id為2的商品 CALL goods_proc02(2)
方式3
1) 變數賦值
SET @變數名=值
2) OUT 輸出引數:表示儲存過程向呼叫者傳出值
OUT 變數名 資料型別
3) 建立儲存過程
需求: 向訂單表 插入一條資料, 返回1,表示插入成功
# 建立儲存過程 接收引數插入資料, 並返回受影響的行數 DELIMITER $$ CREATE PROCEDURE orders_proc(IN o_oid INT , IN o_gid INT ,IN o_price INT, OUT out_num INT) BEGIN -- 執行插入操作 INSERT INTO orders VALUES(o_oid,o_gid,o_price); -- 設定 num的值為 1 SET @out_num = 1; -- 返回 out_num的值 SELECT @out_num; END $$
4) 呼叫儲存過程
# 呼叫儲存過程插入資料,獲取返回值 CALL orders_proc(1,2,30,@out_num);