MySQL(8)数据库中的高级(进阶)正则和存储过程
文章目錄
- 一、正則表達式(REGEXP)
- 1.1 正則表達式匹配符
- 1.2 正則表達式示例
- 示例1:查找name中包含字符串’羅’的數據
- 示例2:查找age中年齡是2開頭的數據
- 示例3:查找value中1和0之間是任意字符的數據
- 示例4:查找value中包含80的,且0可以是任意個的數據
- 示例5:查找age中年齡是29或者34歲的數據
- 示例6:查找value中身價為0到3開頭的數據
- 二、存儲過程
- 2.1 存儲過程的優點
- 2.2 創建、調用和查看存儲的過程
- 1)創建存儲過程
- 2)調用存儲過程
- 3)查看存儲過程
- 4)刪除存儲過程
- 2.3 存儲過程的參數
- 2.4 存儲過程的控制語句
- 2.4.1 條件控制語句 if-then-else … end if
- 2.4.2 循環語句 while … end while
一、正則表達式(REGEXP)
1.1 正則表達式匹配符
1.2 正則表達式示例
建立下面mysql表,方便測試使用:
示例1:查找name中包含字符串’羅’的數據
SELECT * FROM football WHERE name REGEXP ‘羅’;
示例2:查找age中年齡是2開頭的數據
SELECT * FROM football WHERE age REGEXP ‘^2’;
示例3:查找value中1和0之間是任意字符的數據
SELECT * FROM football WHERE value REGEXP ‘1.0’;
示例4:查找value中包含80的,且0可以是任意個的數據
SELECT * FROM football WHERE value REGEXP ‘80*’;
示例5:查找age中年齡是29或者34歲的數據
示例6:查找value中身價為0到3開頭的數據
二、存儲過程
存儲過程是組為了完成特定功能的SQL語句集合。
存儲過程在使用過程中是將常用或者復雜的工作預先使用SQL語句寫好并用–個指定的名稱存儲起來,這個過程經編譯和優化后存儲在數據庫服務器中。當需要使用該存儲過程時,只需要調用它即可。存儲過程在執行上比傳統SQL速度更快、執行效率更高。
2.1 存儲過程的優點
1、執行一次后,會將生成的二進制代碼駐留緩沖區,提高執行效率;
2、SQL語句加.上控制語句的集合,靈活性高;;
3、在服務器端存儲,客戶端調用時,降低網絡負載
5、可完成所有的數據庫操作,也可控制數據庫的信息訪問權限
2.2 創建、調用和查看存儲的過程
1)創建存儲過程
DELIMITER KaTeX parse error: Expected 'EOF', got '#' at position 2: #?將語句的結束符號從分號;臨時改… (可以是自定義)
CREATE PROCEDURE proc() #創建存儲過程,過程名為Proc, 不帶參數
-> BEGIN #過程體以關鍵字BEGIN開始
-> SELECT * FROM football; #過程體語句(自己根據需求進行編寫)
-> END $$ #過程體以關鍵字END結束
DELIMITER ; #將語句的結束符號恢復為分號
示例:
2)調用存儲過程
CALL proc;
示例:
3)查看存儲過程
SHOW CREATE PROCEDURE [數據庫.] 存儲過程名; #查看某個存儲過程的具體信息(如果在指定庫中,庫名可以省略)
SHOW CREATE PROCEDURE athlete.proc; #未省略庫名
SHOW CREATE PROCEDURE proc; #省略庫名
SHOW CREATE PROCEDURE STATUS [LIKE ‘%proc%’] \G #豎列查看
示例:
4)刪除存儲過程
DROP PROCEDURE IF EXISTS proc;
示例:刪除存儲過程并查看
2.3 存儲過程的參數
IN輸入參數: 表示調用者向過程傳入值(傳入值可以是字面量或變量)
OUT輸出參數: 表示過程向調用者傳出值(可以返回多個值)(傳出值只能是變量)
INOUT輸入輸出參數: 既表示調用者向過程傳入值,又表示過程向調用者傳出值(值只能是變量)
CREATE PROCEDURE proc1(IN inname CHAR(10))
-> BEGIN
-> SELECT * FROM football WHERE name = inname;
-> END $$
mysql> DELIMITER ;
mysql> CALL proc1(‘梅西’);
示例:
2.4 存儲過程的控制語句
2.4.1 條件控制語句 if-then-else … end if
DELIMITER KaTeX parse error: Expected 'EOF', got '#' at position 2: #?修改默認結束符為
CREATE PROCEDURE proc2(IN pro int) #創建存儲過程proc2,參數為pro,類型為int
-> BEGIN #過程體以關鍵字BEGIN開始
-> DECLARE var int; #定義變量var為int類型
-> SET var=pro*3; #設置變量var等于傳入參數的3倍
-> if var>=10 then #如果變量var大于10,則執行下面過程體
-> UPDATE football SET id=id+10; #設置表football中的id加10
-> else #如果變量var不大于10,則執行下面過程體
-> UPDATE football SET id=id-10; #設置表football中的id減10
-> end if; #結束if語句
-> END $$ #創建存儲過程結束
DELIMITER ; #重新修改默認結束符為原始的;
CALL proc2(4); #調用proc2存儲過程,并傳入參數4
實例:
1)查看原始數據
2)創建含有控制語句存儲過程并調用
3)查看調用存儲過程之后的數據
2.4.2 循環語句 while … end while
CREATE TABLE test(id int(3)); #創建test表,只有一個字段id
DELIMITER KaTeX parse error: Expected 'EOF', got '#' at position 2: #?修改默認結束符為
-> CREATE PROCEDURE proc6() #創建存儲過程proc6
-> BEGIN #過程體以關鍵字BEGIN開始
-> DECLARE var int(10); #定義變量var為int類型(長度最大為10)
-> set var=0; #設置var=0
-> while var<6 do #使用while循環,var要小于6
-> INSERT INTO test VALUES(var); #滿足條件則進行添加數據,內容為變量var
-> set var=var+1; #變量var每次循環后加1
-> end while; #結束while循環
-> END$$ #創建存儲過程結束
DELIMITER ; #重新修改默認結束符為原始的;
CALL proc6; #調用proc2存儲過程
實例:
1)創建表test,只有一個字段id,查看數據為空
2)創建含有while循環語句存儲過程并調用
3)查看調用存儲過程之后的數據
總結
以上是生活随笔為你收集整理的MySQL(8)数据库中的高级(进阶)正则和存储过程的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: MySQL(7)数据库中的高级(进阶)语
- 下一篇: Mysql 概述