Mysql数据库的正则和存储过程
正则表达式(REGEXP)
正则表达式匹配符
正则表达式 | 说明 |
---|---|
^ | 匹配文本的开始字符 |
$ | 匹配文本的结束字符 |
. | 匹配任何单个字符 |
* | 匹配零个或多个在它前面的字符 |
+ | 匹配前面的字符1次或多次 |
字符串 | 匹配包含指定的字符串 |
p1|p2 | 匹配 p1 或 p2 |
[…] | 匹配字符集合中的任意一个字符 |
[^…] | 匹配不在括号中的任何字符 |
{n} | 匹配前面的字符串n次 |
{n,m} | 匹配前面的字符串至少n次,至多m次 |
1 SELECT * FROM team WHERE name REGEXP 'l';
存储过程
存储过程是组为了完成特定功能的SQL语句集合。
存储过程在使用过程中是将常用或者复杂的工作预先使用SQL语句写好并用一个指定的名称存储起来,这个过程经编译和优化后存储在数据库服务器中。当需要使用该存储过程时,只需要调用它即可。存储过程在执行上比传统SQL速度更快、执行效率更高。
存储过程的优点
- 执行一次后,会将生成的二进制代码驻留缓冲区,提高执行效率;
- SQL语句加上控制语句的集合,灵活性高;
- 在服务器端存储,客户端调用时,降低网络负载;
- 可多次重复被调用,可随时修改,不影响客户端调用;
- 可完成所有的数据库操作,也可控制数据库的信息访问权限。
创建、调用和查看存储的过程
创建存储过程
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存储过程