MySQL入門很簡單-學習筆記
避免編寫重複的語句
安全性可控
執行效率高
14.1、建立儲存過程和函式
14.1.1、建立儲存過程
CREATE PROCEDUREsp_name ([proc_parameter[,...]])
[characteristic...] routine_body
procedure 發音 [prə'si:dʒə]
proc_parameter IN|OUT|INOUT param_name type
characteristic n. 特徵;特性;特色
LANGUAGESQL 預設,routine_boyd由SQL組成
[NOT]DETERMINISTIC 指明儲存過程的執行結果是否是確定的,預設不確定
CONSTAINSSQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA指定程式使用SQL語句的限制
CONSTAINS SQL 子程式包含SQL,但不包含讀寫資料的語句,預設
NO SQL 子程式中不包含SQL語句
READS SQL DATA 子程式中包含讀資料的語句
MODIFIES SQL DATA 子程式中包含了寫資料的語句
SQLSECURITY {DEFINER|INVOKER},指明誰有許可權執行。
DEFINER,只有定義者自己才能夠執行,預設
INVOKER 表示呼叫者可以執行
COMMENT‘string’ 註釋資訊
CREATEPROCEDURE num_from_employee (IN emp_id, INT, OUT count_num INT)
READS SQL DATA
BEGIN
SELECTCOUNT(*) INTO
FROMemployee
WHEREd_id=emp_id;
END
14.1.2、建立儲存函式
CREATE FUNCTIONsp_name ([func_parameter[,...]])
RETURNS type
[characteristic...] routine_body
CREATEFUNCTION name_from_employee(emp_id INT)
RETURNSVARCHAR(20)
BEGIN
RETURN (SELECT name FROM employee WHEREnum=emp_id);
END
14.1.3、變數的使用
1.定義變數
DECLARE var_name[,…]type [DEFAULT value]
DECLAREmy_sql INT DEFAULT 10;
2.為變數賦值
SETvar_name=expr[,var_name=expr]…
SELECT col_name[,…]INTO var_name[,…] FROM table_name WHERE condition
14.1.4、定義條件和處理程式
1.定義條件
DECLARE condition_nameCONDITION FOR condition_value
condition value:
SQLSTATE[VALUE] sqlstate_value | mysql_error_code
對於ERROR 1146(42S02)
sqlstate_value: 42S02
mysql_error_code:1146
//方法一
DECLARE can_not_find CONDITION FOR SQLSTATE ‘42S02’
//方法二
DECLARE can_not_find CONDITION FOR 1146
2.定義處理程式
DECLAREhander_type HANDLER FOR condition_value[,…] sp_statement
handler_type:
CONTINUE|EXIT|UNDO
condition_value:
SQLSTATE[VALUE] sqlstate_value | condition_name |SQLWARNING|NOTFOUND|SQLEXCEPTION|mysql_error_code
UNDO目前MySQL不支援
1、捕獲sqlstate_value
DECLARE CONTINUE HANDLER FOR SQLSTATE ‘42S02’ SET @info=’CANNOT FIND’;
2、捕獲mysql_error_code
DECLARE CONTINUE HANDLER FOR 1146 SET @info=’CAN NOT FIND’;
3、先定義條件,然後呼叫
DECLARE can_not_find CONDITION FOR 1146;
DECLARE CONTINUE HANDLER FOR can_not_find SET @info=’CANNOT FIND’;
4、使用SQLWARNING
DECLARE EXITHANDLER FOR SQLWARNING SET @info=’CANNOT FIND’;
5、使用NOT FOUND
DECLARE EXIT HANDLER FOR NOT FOUND SET @info=’CANNOT FIND’;
6、使用SQLEXCEPTION
DECLARE EXIT HANDLER FOR SQLEXCEPTION SET @info=’CANNOT FIND’;
14.1.5、游標的使用
儲存過程中對多條記錄處理,使用游標
1.宣告游標
DECLAREcousor_name COURSOR FOR select statement;
DECLAREcur_employee CURSOR FOR SELECT name, age FROM employee;
2.開啟游標
OPENcursor_name;
OPENcur_employee;
3.使用游標
FETCHcur_employee INTO var_name[,var_name…];
FETCH cur_employeeINTO emp_name, emp_age;
4.關閉游標
CLOSEcursor_name
CLOSE cur_employee
14.1.6、流程控制的使用
1.IF語句
IFsearch_condition THEN statement_list
[ELSEIF search_condition THENstatement_list]…
[ELSE statement_list]
END IF
IF age>20THEN SET @[email protected]+1;
ELSEIF age=20 THEN @[email protected]+1;
ELSE @[email protected]+1;
END
2.CASE語句
CASE case_value
WHEN when_value THEN statement_list
[WHEN when_value THEN statement_list]…
[ELSE statement_list]
END CASE
CASE
WHEN search_condition THENstatement_list
[WHEN search_condition THENstatement_list]…
[ELSE statement_list]
END CASE
CASE age
WHEN 20 THEN SET @[email protected]+1;
ELSE SET @[email protected]+1;
END CASE;
CASE
WHERE age=20 THEN [email protected][email protected]+1;
ELSE SET @[email protected]+1;
END CASE;
3.LOOP語句
[begin_label:]LOOP
statement_list
ENDLOOP[end_label]
add_num:LOOP
SET @[email protected]+1;
END LOOPadd_num;
4.LEAVE語句
跳出迴圈控制
LEAVE label
add_num:LOOP
SET @[email protected]+1;
LEAVE add_num;
END LOOPadd_num;
5.ITERATE語句
跳出本次迴圈,執行下一次迴圈
ITERATE label
add_num:LOOP
SET @[email protected]+1;
IF @count=100 THEN LEAVE add_num;
ELSEIF MOD(@count,3)=0 THEN ITERATEadd_num;
SELECT * FROM employee;
END LOOPadd_num;
6.REPEAT語句
有條件迴圈,滿足條件退出迴圈
[begin_label:]REPEAT
statement_list
UNTIL search_condition
ENDREPEAT[end_label]
REPEAT
SET @[email protected]+1;
UNTIL @count=100;
ENDREPEAT;
7.WHILE語句
[begin_label:]WHILEsearch_condition DO
statement_list
ENDREPEAT[end_label]
[email protected]<100 DO
SET @[email protected]+1;
ENDWHILE;
14.2、呼叫儲存過程和函式
儲存過程是通過CALL語句來呼叫的。而儲存函式的使用方法與MySQL內部函式的使用方法是一樣的。執行儲存過程和儲存函式需要擁有EXECUTE許可權。EXECUTE許可權的資訊儲存在information_schema資料庫下面的USER_PRIVILEGES表中
14.2.1、呼叫儲存過程
CALL sp_name([parameter[,…]]) ;
14.2.2、呼叫儲存函式
儲存函式的使用方法與MySQL內部函式的使用方法是一樣的
14.3、檢視儲存過程和函式
SHOW { PROCEDURE| FUNCTION } STATUS [ LIKE ' pattern ' ];
SHOW CREATE {PROCEDURE | FUNCTION } sp_name ;
SELECT * FROMinformation_schema.Routines WHERE ROUTINE_NAME=' sp_name ' ;
14.4、修改儲存過程和函式
ALTER {PROCEDURE| FUNCTION} sp_name [characteristic ...]
characteristic:
{ CONTAINS SQL |NO SQL | READS SQL DATA | MODIFIES SQL DATA }
| SQL SECURITY {DEFINER | INVOKER }
| COMMENT'string'
14.5、刪除儲存過程和函式
DROP {PROCEDURE| FUNCTION } sp_name;
相關推薦
MySQL入門很簡單-學習筆記
避免編寫重複的語句 安全性可控 執行效率高 14.1、建立儲存過程和函式 14.1.1、建立儲存過程 CREATE PROCEDUREsp_name ([proc_parameter[,...]]) [characteristic...] routine_body pr
《Java Web開發入門很簡單》學習筆記
《Java Web開發入門很簡單》學習筆記 1123 第1章 瞭解Java Web開發領域Java Web主要涉及技術包括:HTML、JavaScript、CSS、JSP、Servlet、JDBC、Ja
MySQL入門很簡單——讀書筆記
第八章 檢視 試圖是從一個或多個表中匯出來的表,是一種虛擬存在的表。檢視就像一個視窗,通過這個視窗,可以看到系統專門提供的資料。這樣,使用者可以只看到對自己有用的資料,而不用看到整個資料表中的其他資料。 8.1檢視簡介 8.1.1 檢視是一種虛擬的表,是從資料庫中一個或多個表中匯出來的表。檢視還可以從已經存在
MySQL入門很簡單-檢視
1、檢視是從一個或多個表中匯出的表,是虛擬的表。通過檢視可以看到系統專門提供的資料,作用是方便使用者對資料的操作。 檢視可以從存在的檢視的基礎上定義。資料庫只存放檢視的定義,不存放檢視中的資料,資料存放在原來的表。使用檢視查詢資料時,資料庫系統從原來的表中取出對應
JavaScript入門--慕課網學習筆記
裏的 編寫 .com span 符號 代碼格式 www 空白 body JAVASCRIPT—(慕課網)入門篇 我們來看看如何寫入JS代碼?你只需一步操作,使用<script>標簽在HTML網頁中插入JavaScript代碼。
《MySQL必知必會學習筆記》:子查詢
簡單的 後繼 復雜 pos clas tty append 靈活 values 子查詢 在開始了解子查詢之前,首先做下準備工作,建立3個表, 一個是customers表,當中包含:客戶名字、客戶ID、客戶Tel等。 一個是orders
<C#入門經典>學習筆記1之初識C#
ack fad 浮點 2.0 十六進制 float 一個 sca 每一個 序言 選擇《 C#入門經典第五版》作為自學書籍,以此記錄學習過程中的筆記與心得。 C#簡單介紹 1. C#是一種塊結構的語言 2. C#區分大寫
Redis入門很簡單之四【初識Jedis】
ive 基本 common port sta ole urn 超時時間 keyword Redis入門很簡單之四【初識Jedis】 博客分類: NoSQL/Redis/MongoDB redisnosql緩存jedis 使用Jedis提供的Java API對
Redis入門很簡單之二【常見操作命令】
哈希表 shu 分享 排序。 sca ann mongodb pin set Redis入門很簡單之二【常見操作命令】 博客分類: NoSQL/Redis/MongoDB redisnosql緩存 Redis提供了豐富的命令,允許我們連接客戶端對其進行直接
ES6 class的繼承-學習筆記
style 學習筆記 nds ont 子類 extend per 自己的 -s 1、Class 可以通過extends關鍵字實現繼承,這比 ES5 的通過修改原型鏈實現繼承,要清晰和方便很多。 子類必須在constructor方法中調用super方法,否則新建實例時會報
MySql 在cmd下的學習筆記 —— 有關儲存過程的操作(procedure)
image eat spa proc idt span case 流程 循環 我們把若幹條sql封裝取來,起個名字------把此過程存儲在數據庫中叫存儲過程 調用procedure 儲存過程是可以變成的,意味著可以使用變量,表達式,控制結構 來完成復雜的功能 聲明
2018/09/07《塗抹MySQL》【引擎】學習筆記(四)
靈活 appears 優點 tables use 做什麽 null div 在線 讀 第七章《引擎》 總結 1:什麽是引擎? - 就是一種數據存取和處理方式。 - 在 MySQL 中,引擎是以"插件式"存在的,使我們可以很方便的使用各種引擎。 2:怎麽查
2018/09/13《塗抹MySQL》【MySQL復制特性】學習筆記(六)
ref nor affect 來看 like 從數據 b2c img 密碼 推薦一首歌 - 《可不可以》張紫豪 好吧,隨便從排行榜上找了一首 讀 第十一章《MySQL的復制特性》 總結 1:復制(Replication) 應用場景? - 提高性能 (通過
Linux入門-教學視頻學習筆記
視頻 學習筆記 表示 inf src 調用 負責 程序 內核 視頻地址:https://www.bilibili.com/video/av18156598 1.sudo權限 比如說關機、重啟、添加其他用戶。 2.Shell是什麽? 這是一個結構圖,比如在外層應用程序輸
MySQL之Innodb恢復的學習筆記
idle oba not run nag recv cts 相對 nor 長度 MySQL · 引擎特性 · InnoDB 崩潰恢復過程 enum { SRV_FORCE_IGNORE_CORRUPT = 1, /*!< let the server r
學好這4步Python入門很簡單
1. 變數型別簡介及操作: 變數讓你能夠把程式中準備使用的每一段資料都賦給一個簡短、易於記憶的名字,變數型別是指賦值於變數中的資料型別。 Python變數型別(深色Mark部分變數為不可更改的變數) 2. 條件控制及迴圈語句: 條件語句是通過一條或多條語句的執
實驗吧-CTF-web-忘記密碼了&&這個看起來有點簡單 (學習筆記)
實驗環境 firefox BurpsuitePro-v1.6 sqlmap(kali) 忘記密碼了 題目為一個連結 開啟是一個輸入郵箱接收重置密碼的網頁,檢視原始碼發現管理員郵箱,vim格式,可能會有一個備份檔案.swp,還有一個重置密碼連結 構造一下url,改為http
《深入淺出MySQL:資料庫開發、優化與管理維護(2nd)》第31章之MySQL半同步複製搭建學習筆記
MySQL的非同步複製在使用的過程中,主庫和從庫的資料之間存在一定的延遲,這樣存在一個隱患:當在主庫上寫入一個事務並提交成功,而從庫尚未得到主庫推送的Binlog日誌時,主庫宕機了,例如主庫可能因磁碟損壞、記憶體故障等造成主庫上該事務Binlog丟失,此時從庫就可能損失這個事務,從而造成主從不一致。
Java基礎部分_Java基礎入門階段(零基礎java入門教程)_學習筆記
本文學習內容來自騰訊課堂提供的學習視訊。進入騰訊課堂官網,搜尋 Java基礎入門階段 就可以看到這門免費培訓視訊。 培訓視訊詳細類別為:IT 網際網路> 程式語言>Java>Java基礎入門階段(javase教程,零基礎java入門教程)(階段一)。
進入MySQL資料庫的大門(學習筆記,有你就夠了)
一、初識資料庫 1、什麼是資料庫 資料庫叫database ,簡稱DB,是長期存放在計算機內,有組織、可共享的大量資料的集合;資料庫就是存放資料的倉庫,專業的資料庫系統具有較小的資料冗餘度,較高的資料安全性,易擴充套件性。 資料庫設計原則: mysql主要優勢:一個應用對