MySQL-09-mysql 存儲過程入門介紹

拓展閱讀

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

就可以獲取對應的信息。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章