MySQL 是一種開源的關聯式資料庫管理系統,它支援多種程式語言。在開發應用程式時,我們常常需要執行一些複雜的 SQL 查詢語句,這時候可以使用 MySQL 預存程序來完成這項工作。
預存程序是一組 SQL 語句的集合,這些 SQL 語句可以接受參數和傳回結果集。相較於單獨執行 SQL 語句,使用預存程序有以下優點:
下面我們來看一些常見的 MySQL 預存程序的範例。
(1) 建立一個簡單的預存程序
CREATE PROCEDURE get_person
(IN id INT)
BEGIN
SELECT * FROM person WHERE id = id;
END;
上面的程式碼建立了一個名為get_person
的預存過程,帶有一個輸入參數id
,傳回person
表中指定id 的所有資訊.參數的型別可以是 IN
、OUT
或 INOUT
,分別表示輸入、輸出和輸入/輸出類型。
執行預存程序的語句為:
CALL get_person(1);
這條語句將會回傳person
表中id
為1 的記錄。
(2) 建立一個帶有輸出參數的預存程序
CREATE PROCEDURE get_status
(IN id INT, OUT status VARCHAR(50))
BEGIN
SELECT status FROM order WHERE id = id INTO status;
END;
這個預存程序接受一個輸入參數id
,並將order
表中id
對應的status
欄位值會回到status
變數中。
執行預存程序的語句為:
CALL get_status(1, @status);
SELECT @status;
這條語句將輸出order
表中id
為1 的記錄的status
欄位值。
(3) 建立一個帶有遊標的預存程序
CREATE PROCEDURE get_persons_by_age
(IN age INT)
BEGIN
DECLARE done BOOLEAN DEFAULT FALSE; DECLARE pid INT; DECLARE pname VARCHAR(50); DECLARE persons CURSOR FOR SELECT id, name FROM person WHERE age = age; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE; OPEN persons; repeat_row: LOOP FETCH persons INTO pid, pname; IF done THEN LEAVE repeat_row; END IF; SELECT pid, pname; END LOOP; CLOSE persons;
END;
這個預存程序接受一個輸入參數age
,並且傳回person
表中所有age
等於age
的記錄。
此預存程序使用遊標來遍歷結果集,並輸出每個記錄的 id
和 name
欄位值。
執行預存程序的語句為:
CALL get_persons_by_age(20);
這句話將傳回person
表中所有age
為20 的記錄,並輸出它們的id
和name
值。
總之,使用 MySQL 預存程序可以輕鬆完成一些複雜的資料庫操作,並提高應用程式的效率和安全性。開發人員可以根據實際需求設計合適的儲存過程,以達到最佳的效能和可維護性。
以上是mysql 查詢預存程序的詳細內容。更多資訊請關注PHP中文網其他相關文章!