1. 程式人生 > >MySQL入門很簡單-學習筆記

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

count_num

                  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

&lt;C#入門經典&gt;學習筆記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主要優勢:一個應用對