擴充閱讀
MySQL 00 View
MySQL 01 Ruler mysql 日常開發規範
MySQL 02 truncate table 與 delete 清空表的區別和坑
MySQL 03 Expression 1 of ORDER BY clause is not in SELECT list,references column
MySQL 04 EMOJI 表情與 UTF8MB4 的故事
MySQL 05 MySQL入門教程(MySQL tutorial book)
MySQL 06 mysql 如何實現類似 oracle 的 merge into
MySQL 07 timeout 超時異常
MySQL 08 datetime timestamp 以及如何自動更新,如何實現範圍查詢
MySQL 09 MySQL-09-SP mysql 儲存過程
SP
常用的運算元據庫語言SQL語句在執行的時候需要要先編譯,然後執行。
儲存過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經編譯後儲存在資料庫中,使用者透過指定儲存過程的名字並給定引數(如果該儲存過程帶有引數)來呼叫執行它。
- 優點
(1) 儲存過程增強了SQL語言的功能和靈活性。儲存過程可以用流控制語句編寫,有很強的靈活性,可以完成複雜的判斷和較複雜的運算。
(2) 儲存過程允許標準元件是程式設計。儲存過程被建立後,可以在程式中被多次呼叫,而不必重新編寫該儲存過程的SQL語句。而且資料庫專業人員可以隨時對儲存過程進行修改,對應用程式原始碼毫無影響。
(3) 儲存過程能實現較快的執行速度。如果某一操作包含大量的 Transaction-SQL 程式碼或分別被多次執行,那麼儲存過程要比批處理的執行速度快很多。
因為儲存過程是預編譯的。在首次執行一個儲存過程時查詢,最佳化器對其進行分析最佳化,並且給出最終被儲存在系統表中的執行計劃。而批處理的 Transaction-SQL 語句在每次執行時都要進行編譯和最佳化,速度相對要慢一些。
(4) 儲存過程能過減少網路流量。針對同一個資料庫物件的操作(如查詢、修改),如果這一操作所涉及的 Transaction-SQL 語句被組織程儲存過程,那麼當在客戶計算機上呼叫該儲存過程時,
網路中傳送的只是該呼叫語句,從而大大增加了網路流量並降低了網路負載。
(5) 儲存過程可被作為一種安全機制來充分利用。系統管理員透過執行某一儲存過程的許可權進行限制,能夠實現對相應的資料的訪問許可權的限制,避免了非授權使用者對資料的訪問,保證了資料的安全。
MySQL 中對於儲存過程的支援在 5.0+;
本文案例版本為 5.7;
Learn
對於 SP 的學習,可以直接在 Mysql 命令列客戶端輸入
mysql> ? procedure
將會得到如下響應:
Many help items for your request exist.
To make a more specific request, please type 'help <item>',
where <item> is one of the following
topics:
ALTER PROCEDURE
CREATE PROCEDURE
DROP PROCEDURE
PROCEDURE ANALYSE
SELECT
SHOW
SHOW CREATE PROCEDURE
SHOW PROCEDURE CODE
SHOW PROCEDURE STATUS
接下來的學習可以直接透過 ?+topic
的形式既可以獲取對應的文件說明及例子。
Hello Word
- 資料準備
執行以下指令碼。
CREATE DATABASE `test`;
USE `test`;
CREATE TABLE user(
id BIGINT(20) PRIMARY KEY AUTO_INCREMENT COMMENT '自增長ID',
name VARCHAR(10) NOT NULL COMMENT '使用者名稱稱',
age int NOT NULL DEFAULT 0 COMMENT '年齡'
) COMMENT 'user table';
INSERT INTO user (name, age)
VALUES
('ryo', 12),
('jim', 14);
執行後資料庫資料應該是這樣的
mysql> select * from user;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | ryo | 12 |
| 2 | jim | 14 |
+----+------+-----+
2 rows in set (0.00 sec)
CREATE PROCEDURE
- client cmd
直接在命令列輸入
? CREATE PROCEDURE
就可以獲取對應的資訊。