mysql 預存程序 函數

PHPz
發布: 2023-05-18 09:50:37
原創
663 人瀏覽過

MySQL 是一款常見的資料庫管理系統,它具備預存程序和函數的功能。本文將介紹 MySQL 中的預存程序和函數的概念、用法和範例。

一、預存程序

  1. 概念

預存程序是一種預先編譯的SQL 語句集,可以儲存在資料庫中並重複執行。它常用於執行複雜的資料庫操作,如插入、更新、刪除資料等。預存程序可以接收參數,並可以傳回一個或多個結果集。

  1. 建立預存程序

使用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 表中所有資料。

  1. 呼叫預存程序

呼叫預存程序使用CALL 語句,語法如下:

CALL procedure_name(param1, param2, ...);
登入後複製

例如:

CALL select_all_users();
登入後複製

這條語句將會執行先前建立的select_all_users 預存程序。

  1. 刪除預存程序

使用DROP PROCEDURE 語句刪除預存程序,語法如下:

DROP PROCEDURE IF EXISTS procedure_name;
登入後複製

例如:

DROP PROCEDURE IF EXISTS select_all_users;
登入後複製

這條語句將會刪除名為select_all_users 的預存程序。

  1. 預存程序範例

下面是一個簡單的預存程序範例,它接收一個輸入參數,將該參數乘以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。

二、函數

  1. 概念

函數是一種特殊的儲存過程,它會傳回一個值,並可接收零個或多個輸入參數。與預存程序不同的是,函數不能執行資料定義語句(CREATE,ALTER,DROP)或事務控制語句(COMMIT,ROLLBACK)。

  1. 建立函數

使用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 後傳回。

  1. 呼叫函數

呼叫函數使用 SELECT 語句,查詢結果即可:

SELECT double_num(5);
登入後複製

輸出結果為 10。

  1. 刪除函數

使用DROP FUNCTION 語句刪除函數,語法如下:

DROP FUNCTION IF EXISTS function_name;
登入後複製

例如:

DROP FUNCTION IF EXISTS double_num;
登入後複製

這條語句將會刪除名為double_num 的函數。

  1. 函數範例

下面是一個簡單的函數範例,它求一個數的階乘:

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。

三、預存程序和函數的差異

預存程序和函數的主要差異有:

  1. 傳回型別不同:預存程序不需要傳回值,而函數需要返回值。
  2. 處理方式不同:預存程序通常用於執行一些操作,如插入、更新、刪除等;函數則常用於數學計算和字串處理等。
  3. 參數傳遞方式不同:預存程序可以使用 IN、OUT 和 INOUT 參數傳遞方式;函數只允許使用 IN 參數傳遞方式。
  4. 呼叫方式不同:預存程序使用 CALL 語句呼叫;函數可以在 SELECT、WHERE 和 HAVING 子句中呼叫。

四、總結

本文介紹了 MySQL 中的預存程序和函數的概念、用法和範例。預存程序和函數都是資料庫管理的重要工具,它們可以提高資料庫的效率和安全性。在實際開發中,應該根據具體需求選擇預存程序或函數。

以上是mysql 預存程序 函數的詳細內容。更多資訊請關注PHP中文網其他相關文章!

來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板