MySQL高级(进阶)SQL语句 3

目 录

  • 一、MySQL进阶语句
    • ①----空值(NULL)和无值("")的区别----
    • ②数据库中的正则表达式
  • 二、存储过程
    • ①创建存储过程
    • ②调用存储过程
    • ③查看存储过程
    • ④存储过程的参数
    • ⑤删除存储过程
    • ⑥存储过程的控制语句

一、MySQL进阶语句

①----空值(NULL)和无值("")的区别----

  1. 无值的长度为0,不占用空间的;而NULL值的长度是NULL,是占用空间的。
  2. IS NULL或者 Is Nor NULL,是用来判断字段是不是为NOLL或者不是NOLL,不能查出是不是无值的。
  3. 无值的判断使用=’'或者<>"来处理。<>代表不等于。{}
  4. 在通过count()指定字段统计有多少行数时,如果遇到NULL值会自动忽略掉,遇到无值会加入到记录中进行计算。

②数据库中的正则表达式

匹配 模式描述 实例
^ 匹配文本的开始宁符 '^bd’匹配以 bd开头的字符串
$ 匹配文本的结束字符 'qn$'匹配以qn结尾的字符串
. 匹配任何单个字符 's.t’匹配任何s和t之间有一个字符的字符串
* 匹配零个或多个在它前面的字符 'fo*t’匹配t前面有任意个o
+ 匹配前面的字符1次或多次 'hom+'匹配以 ho开头,后面至少一个m的字符串
字符串 匹配包含指定的字符串 'clo’匹配含有clo 的字符串
p1lp2 匹配 p1或p2 'bg|fg’匹配bg或者fg
[ …] 匹配字符集合中的任意一个字符 '[abc]匹配a或者b或者c
[^…] 匹配不在括号中的任何字符 '[ ^ab]'匹配不包含a或者b的字符串
{n} 匹配前面的字符串n次 'g{2]'匹配含有2个g的字符串
{n, m} 匹配前面的字符串至少n次,至多m次 'f{1,3}'匹配f最少1次,最多 3 次

语法:SELECT "栏位”FROM "表名”WHERE"栏位”REGEXP{模式};
SELECT * FROM Store_Info WHERE Store_Name REGEXP ‘os’ ;
SELECT * FROM Store_Info WHERE Store_Name REGEXP '^[A-G] ';
SELECT * FROM Store_Info WHERE Store_Name REGEXP ‘HolBo’;

二、存储过程

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

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

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

①创建存储过程

DELIMITER $$					#将语句的结束符号从分号;临时改为两个$$(可以是自定义)
CREATE PROCEDURE Proc()			#学创建存储过程,过程名为Proc、不带参数
->BEGIN							#过程体以关键字BEGIN开始
->select * from Store_Info;		#彩过程体语句
->END $$						#过程体以关键字END 结束
DELIMITER ;						#半将语句的结束符号恢复为分号

②调用存储过程

CALL Proc;

③查看存储过程

SHOW CREATE PROCEDURE[数据库.]存储过程名;		#查看某个存储过程的具体信息

SHOW CREATE PROCEDURE Proc;

SHOW PROCEDURE STATUS [LIKE '%Proc%']\G

④存储过程的参数

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

DELIMITER $$
CREATE PROCEDURE Proc1(IN inname CHAR (16))
->BEGIN
->SELECT * FROM Store_Info WHERE Store_Name = inname;
->END $$
DELIMITER ;

CALL Proc1('Boston') ;

⑤删除存储过程

存储过程内容的修改方法是通过删除原有存储过程,之后再以相同的名称创建新的存储过程。

DROP PROCEDURE IF EXISTS Proc;
#仅当存在时删除,如果指定的过程不存在,则产生一个错误

⑥存储过程的控制语句

create table t (id int (10));
insert into t values (10);

(1)条件语句if-then-else :..: end ifDELIMITER $$
CREATEPROCEDURE proc2(IN pro int)
-> begin
-> declare var int;-> set var=pro*2;
-> if var>=10 then
-> update t set id=id+1;
-> else
-> update t set id=id-1;
->end if;
-> end $$
DELIMITER ;

CALL Proc2(6);

(2)循环语句while .... end while
DELIMITER $$
CREATE PROCEDURE proc3()
-> begin
-> declare var int (10);
-> set var=0;
-> while var<6 do
-> insert into t values (var) ;
-> set var=var+1;
-> end while;
-> end $$
DELIMITER ;

CALL Proc3;

你可能感兴趣的:(MySQL,数据库,mysql)