Mysql高阶语句及存储过程
?
目录
mysql高阶语句
case是 SQL 用来做为if,then,else 之类逻辑的关键字。
select case '字段' when 值1或表达式 then 值或表达式?
when 值2或表达式 then 值或表达式
.......
else 值或表达式 end AS "字段别名"?
from 表;
空值(NULL) 和 无值('') 的区别:
空值null 的长度为 NULL ,占用空间;可以通过 字段 is null 或 字段 is not null 判断是否为null行;count(字段) 会忽略 null 行
无值'' 的长度为 0 ,不占用空间;可以通过 字段 = '' 或 字段 <> '' 判断是否为无值的行;count(字段) 不会忽略 无值 的行
测试一下:
正则表达式:
^ ?? ??? ??? ??? ?匹配文本的开始字符?
$ ?? ??? ??? ??? ?匹配文本的结束字符
. ?? ??? ??? ??? ?匹配任何单个字符
* ?? ??? ??? ??? ?匹配零个或多个在它前面的字符?
+ ?? ??? ??? ??? ?匹配前面的字符 1 次或多次
p1|p2 ?? ??? ??? ?匹配 p1 或 p2?
[...] ?? ??? ??? ?匹配字符集合中的任意一个字符?
[^...] ?? ??? ??? ?匹配不在括号中的任何字符,取反
{n} ?? ??? ??? ?匹配前面的字符串 n 次
{n,m}?? ??? ??? ?匹配前面的字符串至少 n 次,至多m 次
存储过程:
存储过程是一组为了完成特定功能的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;
存储过程的参数:
IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)
OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)
INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)
create procedure 存储过程名(inout 参数名 参数数据类型)
begin
? ? select 字段 into 参数名 from 表 where 字段 = 参数名;
end$$
set @变量名 = 传入的值; ? ? ?设置传入的值
call 存储过程名(@变量名); ? ?传入传出参数指定的值只能是变量名
select @变量名; ? ? ? ? ? ? ?查看传出的值
?
存储过程的控制语句:
条件语句:
if 条件表达式 then
? ? SQL语句序列1;
else
? ? SQL语句序列2;
end if;
?
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。 如若内容造成侵权/违法违规/事实不符,请联系我的编程经验分享网邮箱:veading@qq.com进行投诉反馈,一经查实,立即删除!