資料庫儲存過程

hhhaaa12138發表於2024-08-16

資料庫儲存過程

MySQL 儲存過程是⼀組 預編譯的 SQL 語句 ,可以在 MySQL 資料庫中 定義和儲存 ,並在 需要時執⾏ 。儲存過程可

以接受引數、執⾏條件判斷、迴圈、異常處理等操作,使得開發⼈員可以把⼀系列操作組合成⼀個可重複使⽤的單

元,從⽽提⾼程式碼的復⽤性和可維護性。

儲存過程可以在 MySQL 資料庫中建立和儲存,然後在需要時調⽤。儲存過程通常⽤於執⾏複雜的資料操作,例如

資料轉換、資料清理、資料分析等。儲存過程的執⾏速度通常⽐單個 SQL 語句的執⾏速度更快,因為儲存過程是

預編譯的,並且可以在多個客戶端之間共享。

MySQL 儲存過程的語法類似於其他程式設計語⾔,包括變數定義、條件語句、迴圈語句、異常處理等。儲存過程可以

接受輸⼊引數和輸出引數,以及返回值。儲存過程還可以使⽤遊標來處理結果集,並且可以調⽤其他儲存過程或函

數。

儲存過程儲存在mysql.proc表中

建立儲存過程:

CREATE PROCEDURE sp_name ([ proc_parameter [,proc_parameter ...]])

其中:proc_parameter : [IN|OUT|INOUT] parameter_name type

其中IN表示輸⼊引數,OUT表示輸出引數,INOUT表示既可以輸⼊也可以輸出;param_name表示引數名稱;type表示

引數的型別

檢視儲存過程列表:

SHOW PROCEDURE STATUS\G

調⽤儲存過程

CALL sp_name ([ proc_parameter [,proc_parameter ...]])

CALL sp_name

說明:當⽆參時,可以省略"()",當有引數時,不可省"()K

儲存過程修改

ALTER語句修改儲存過程只能修改儲存過程的註釋等⽆關緊要的東⻄,不能修改儲存過程體,所以要修改儲存過程,⽅法

就是刪除重建

刪除儲存過程

DROP PROCEDURE [IF EXISTS] sp_name

儲存過程優勢

儲存過程把經常使⽤的SQL語句或業務邏輯封裝起來,預編譯儲存在資料庫中,當需要時從資料庫中直接調⽤,省去了編譯的過程
提⾼了運⾏速度,同時降低⽹絡資料傳輸量,儲存過程相當於獨⽴命令可以直接調⽤

1. 提⾼效能

2. 提⾼安全性

3. 提⾼可維護性

4. 提⾼可重⽤性

5. ⽀持事務處理 ACID

儲存過程與⾃定義函式的區別

1. 返回值型別不同:⾃定義函式必須返回⼀個值,⽽儲存過程可以不返回任何值。

2. 使⽤⽅式不同:⾃定義函式可以在SQL語句中使⽤,如SELECT語句中的函式調⽤,⽽儲存過程需要透過CALL語句來調⽤。

3. 事務處理能⼒不同:儲存過程可以包含事務處理程式碼,⽽⾃定義函式不能。

4. 引數傳遞⽅式不同:⾃定義函式只能透過引數傳遞來接收輸⼊值,並返回計算結果。⽽儲存過程可以透過輸⼊、輸出、輸⼊輸出三種引數型別來傳遞引數。

5. 可重⽤性不同:⾃定義函式可以在多個查詢中使⽤,⽽儲存過程需要單獨調⽤

示例

image-20240816200749148

跨資料庫執行

image-20240816201920355

計算的儲存過程示例

image-20240816204311555

儲存過程名為 dorepeat ,它有⼀個引數 n ,並使⽤ REPEAT 迴圈計算從0到n的總和。最後,儲存過程將結果儲存

在MySQL⽤戶變數 @sum 中。

使⽤ delimiter 命令來指定儲存過程的結束符。這是必要的,因為儲存過程中包含了多個分號。在儲存過程結束

後,使⽤ delimiter 命令將結束符改回分號。

使⽤ CALL 語句調⽤儲存過程,並使⽤ SELECT 語句來檢索儲存在 @sum 中的結果

相關文章