資料庫儲存過程
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. 可重⽤性不同:⾃定義函式可以在多個查詢中使⽤,⽽儲存過程需要單獨調⽤
示例
跨資料庫執行
計算的儲存過程示例
儲存過程名為 dorepeat ,它有⼀個引數 n ,並使⽤ REPEAT 迴圈計算從0到n的總和。最後,儲存過程將結果儲存
在MySQL⽤戶變數 @sum 中。
使⽤ delimiter 命令來指定儲存過程的結束符。這是必要的,因為儲存過程中包含了多個分號。在儲存過程結束
後,使⽤ delimiter 命令將結束符改回分號。
使⽤ CALL 語句調⽤儲存過程,並使⽤ SELECT 語句來檢索儲存在 @sum 中的結果