Mysql数据库的正则和存储过程

正则表达式(REGEXP)

正则表达式匹配符

正则表达式说明
^ 匹配文本的开始字符
$ 匹配文本的结束字符
. 匹配任何单个字符
* 匹配零个或多个在它前面的字符
+ 匹配前面的字符1次或多次
字符串 匹配包含指定的字符串
p1|p2 匹配 p1 p2
[…] 匹配字符集合中的任意一个字符
[^…] 匹配不在括号中的任何字符
{n} 匹配前面的字符串n次
{n,m} 匹配前面的字符串至少n次,至多m次
1 SELECT * FROM team WHERE name REGEXP 'l';

存储过程

  存储过程是组为了完成特定功能的SQL语句集合。

  存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。

存储过程的优点

  1. 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率
  2. SQL语句加上控制语句的集合,灵活性高
  3. 在服务器端存储,客户端调用时,降低网络负载
  4. 可多次重复被调用,可随时修改,不影响客户端调用
  5. 可完成所有的数据库操作,也可控制数据库的信息访问权限。

创建、调用和查看存储的过程

创建存储过程

1 DELIMITER $$                          #将语句的结束符号从分号;临时改为两个$$ (可以是自定义)
2 CREATE PROCEDURE proc()               #创建存储过程,过程名为Proc,不带参数
3 -> BEGIN                              #过程体以关键字BEGIN开始
4 -> SELECT * FROM team;                #过程体语句(自己根据需求进行编写)
5 -> END $$                             #过程体以关键字END结束
6 DELIMITER ;                           #将语句的结束符号恢复为分号

调用存储过程

1 CALL proc;

查看存储过程

1 SHOW CREATE PROCEDURE [数据库.] 存储过程名;            #查看某个存储过程的具体信息(如果在指定库中,库名可以省略)
2 SHOW CREATE PROCEDURE athlete.proc;                 #未省略库名
3 SHOW CREATE PROCEDURE proc;                         #省略库名
4 
5 SHOW CREATE PROCEDURE STATUS [LIKE '%proc%'] \G     #竖列查看

删除存储过程

1 DROP PROCEDURE IF EXISTS proc;

存储过程的参数

IN输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)

1 delimiter $$  
2 create procedure proc(in 参数 字段类型)   #形参
3 begin
4 select * from 表格 where 条件语句;        #过程体语句
5 end $$
6 delimiter ; 
7 
8 call proc('数据');                       #实参

存储过程的控制语句

条件控制语句 if-then-else … end if

 1 DELIMITER $$                                        #修改默认结束符为$$
 2 CREATE PROCEDURE proc2(IN pro int)                  #创建存储过程proc2,参数为pro,类型为int
 3 -> BEGIN                                            #过程体以关键字BEGIN开始
 4 -> DECLARE var int;                                 #定义变量var为int类型
 5 -> SET var=pro*3;                                   #设置变量var等于传入参数的3倍
 6 -> if var>=10 then                                  #如果变量var大于10,则执行下面过程体
 7 -> UPDATE football SET id=id+10;                    #设置表football中的id加10
 8 -> else                                             #如果变量var不大于10,则执行下面过程体
 9 -> UPDATE football SET id=id-10;                    #设置表football中的id减10
10 -> end if;                                          #结束if语句
11 -> END $$                                           #创建存储过程结束
12 DELIMITER ;                                         #重新修改默认结束符为原始的;
13 CALL proc2(4);                                      #调用proc2存储过程,并传入参数4

循环语句 while … end while

 1 CREATE TABLE test(id int(3));                        #创建test表,只有一个字段id
 2 DELIMITER $$                                         #修改默认结束符为$$
 3 -> CREATE PROCEDURE proc6()                          #创建存储过程proc6
 4 -> BEGIN                                             #过程体以关键字BEGIN开始
 5 -> DECLARE var int(10);                              #定义变量var为int类型(长度最大为10)
 6 -> set var=0;                                        #设置var=0
 7 -> while var<6 do                                    #使用while循环,var要小于6
 8 -> INSERT INTO test VALUES(var);                     #满足条件则进行添加数据,内容为变量var
 9 -> set var=var+1;                                    #变量var每次循环后加1                             
10 -> end while;                                        #结束while循环
11 -> END$$                                             #创建存储过程结束
12 DELIMITER ;                                          #重新修改默认结束符为原始的;
13 CALL proc6;                                          #调用proc2存储过程

posted @ 2021-09-04 20:09  梨xyc  阅读(84)  评论(0)    收藏  举报