1. 程式人生 > 其它 >MySQL:MySQL 儲存過程

MySQL:MySQL 儲存過程

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);