拓展閱讀
MySQL 00 View
MySQL 01 Ruler mysql 日常開發(fā)規(guī)范
MySQL 02 truncate table 與 delete 清空表的區(qū)別和坑
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 如何實現(xiàn)類似 oracle 的 merge into
MySQL 07 timeout 超時異常
MySQL 08 datetime timestamp 以及如何自動更新,如何實現(xiàn)范圍查詢
MySQL 09 MySQL-09-SP mysql 存儲過程
SP
常用的操作數(shù)據(jù)庫語言SQL語句在執(zhí)行的時候需要要先編譯,然后執(zhí)行。
存儲過程(Stored Procedure)是一組為了完成特定功能的SQL語句集,經(jīng)編譯后存儲在數(shù)據(jù)庫中,用戶通過指定存儲過程的名字并給定參數(shù)(如果該存儲過程帶有參數(shù))來調(diào)用執(zhí)行它。
- 優(yōu)點
(1) 存儲過程增強了SQL語言的功能和靈活性。存儲過程可以用流控制語句編寫,有很強的靈活性,可以完成復雜的判斷和較復雜的運算。
(2) 存儲過程允許標準組件是編程。存儲過程被創(chuàng)建后,可以在程序中被多次調(diào)用,而不必重新編寫該存儲過程的SQL語句。而且數(shù)據(jù)庫專業(yè)人員可以隨時對存儲過程進行修改,對應用程序源代碼毫無影響。
(3) 存儲過程能實現(xiàn)較快的執(zhí)行速度。如果某一操作包含大量的 Transaction-SQL 代碼或分別被多次執(zhí)行,那么存儲過程要比批處理的執(zhí)行速度快很多。
因為存儲過程是預編譯的。在首次運行一個存儲過程時查詢,優(yōu)化器對其進行分析優(yōu)化,并且給出最終被存儲在系統(tǒng)表中的執(zhí)行計劃。而批處理的 Transaction-SQL 語句在每次運行時都要進行編譯和優(yōu)化,速度相對要慢一些。
(4) 存儲過程能過減少網(wǎng)絡流量。針對同一個數(shù)據(jù)庫對象的操作(如查詢、修改),如果這一操作所涉及的 Transaction-SQL 語句被組織程存儲過程,那么當在客戶計算機上調(diào)用該存儲過程時,
網(wǎng)絡中傳送的只是該調(diào)用語句,從而大大增加了網(wǎng)絡流量并降低了網(wǎng)絡負載。
(5) 存儲過程可被作為一種安全機制來充分利用。系統(tǒng)管理員通過執(zhí)行某一存儲過程的權限進行限制,能夠?qū)崿F(xiàn)對相應的數(shù)據(jù)的訪問權限的限制,避免了非授權用戶對數(shù)據(jù)的訪問,保證了數(shù)據(jù)的安全。
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
- 數(shù)據(jù)準備
執(zhí)行以下腳本。
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);
執(zhí)行后數(shù)據(jù)庫數(shù)據(jù)應該是這樣的
mysql> select * from user;
+----+------+-----+
| id | name | age |
+----+------+-----+
| 1 | ryo | 12 |
| 2 | jim | 14 |
+----+------+-----+
2 rows in set (0.00 sec)
CREATE PROCEDURE
- client cmd
直接在命令行輸入文章來源:http://www.zghlxwxcb.cn/news/detail-850356.html
? CREATE PROCEDURE
就可以獲取對應的信息。文章來源地址http://www.zghlxwxcb.cn/news/detail-850356.html
到了這里,關于MySQL-09-mysql 存儲過程入門介紹的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!