MySQL 是一款常見的資料庫管理系統,它具備預存程序和函數的功能。本文將介紹 MySQL 中的預存程序和函數的概念、用法和範例。
一、預存程序
預存程序是一種預先編譯的SQL 語句集,可以儲存在資料庫中並重複執行。它常用於執行複雜的資料庫操作,如插入、更新、刪除資料等。預存程序可以接收參數,並可以傳回一個或多個結果集。
使用CREATE PROCEDURE 語句建立預存程序,語法如下:
CREATE PROCEDURE procedure_name ([IN | OUT | INOUT] parameter_name datatype [(size)]) [NOT DETERMINISTIC] [SQL SECURITY {DEFINER | INVOKER}] [COMMENT ‘string’] BEGIN -- 存储过程内部语句 END;
其中,參數為可選項:IN 表示輸入參數,OUT 表示輸出參數,INOUT 表示既是輸入參數又是輸出參數。 datatype 表示資料類型,size 表示長度,NOT DETERMINISTIC 表示是否確定性,SQL SECURITY 表示存取控制級別,COMMENT 表示註解;BEGIN 和 END 之間是預存程序內部的 SQL 語句集。
例如:
CREATE PROCEDURE select_all_users () BEGIN SELECT * FROM users; END;
該預存程序名為 select_all_users,沒有參數,內部執行了 SELECT * FROM users 語句,即查詢 users 表中所有資料。
呼叫預存程序使用CALL 語句,語法如下:
CALL procedure_name(param1, param2, ...);
例如:
CALL select_all_users();
這條語句將會執行先前建立的select_all_users 預存程序。
使用DROP PROCEDURE 語句刪除預存程序,語法如下:
DROP PROCEDURE IF EXISTS procedure_name;
例如:
DROP PROCEDURE IF EXISTS select_all_users;
這條語句將會刪除名為select_all_users 的預存程序。
下面是一個簡單的預存程序範例,它接收一個輸入參數,將該參數乘以2 後輸出:
CREATE PROCEDURE double_num (IN num INT, OUT result INT) BEGIN SET result = num * 2; END;
呼叫該預存程序:
CALL double_num(5, @result); SELECT @result;
輸出結果為10。
二、函數
函數是一種特殊的儲存過程,它會傳回一個值,並可接收零個或多個輸入參數。與預存程序不同的是,函數不能執行資料定義語句(CREATE,ALTER,DROP)或事務控制語句(COMMIT,ROLLBACK)。
使用CREATE FUNCTION 語句建立函數,語法如下:
CREATE FUNCTION function_name ([parameter_name datatype [(size)]] [, ...]) RETURNS return_datatype BEGIN -- 函数内部语句 END;
其中,parameter_name 和datatype 表示輸入參數的名稱和類型, size 表示長度;return_datatype 表示傳回值的資料型別;BEGIN 與END 之間是預存程序內部的SQL 語句集。
例如:
CREATE FUNCTION double_num (num INT) RETURNS INT BEGIN RETURN num * 2; END;
此函數名稱為 double_num,輸入參數為 num,傳回型別為 INT,將 num 值乘以 2 後傳回。
呼叫函數使用 SELECT 語句,查詢結果即可:
SELECT double_num(5);
輸出結果為 10。
使用DROP FUNCTION 語句刪除函數,語法如下:
DROP FUNCTION IF EXISTS function_name;
例如:
DROP FUNCTION IF EXISTS double_num;
這條語句將會刪除名為double_num 的函數。
下面是一個簡單的函數範例,它求一個數的階乘:
CREATE FUNCTION factorial (n INT) RETURNS INT BEGIN IF n <= 0 THEN RETURN 1; ELSE RETURN n * factorial(n - 1); END IF; END;
呼叫函數:
SELECT factorial(5);
輸出結果為120。
三、預存程序和函數的差異
預存程序和函數的主要差異有:
四、總結
本文介紹了 MySQL 中的預存程序和函數的概念、用法和範例。預存程序和函數都是資料庫管理的重要工具,它們可以提高資料庫的效率和安全性。在實際開發中,應該根據具體需求選擇預存程序或函數。
以上是mysql 預存程序 函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!