Mysql高阶语句及存储过程

目录

[空值(NULL) 和 无值('') 的区别:](#空值(NULL) 和 无值('') 的区别:)

正则表达式:

存储过程:

创建存储过程:

存储过程的参数:

存储过程的控制语句:


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 次 ![](https://file.jishuzhan.net/article/1742432923413385218/b444022866e6e4bafc7ef0f11c979804.webp) ![](https://file.jishuzhan.net/article/1742432923413385218/16c0f2d42c5a12c04eb106e0327c3539.webp) ![](https://file.jishuzhan.net/article/1742432923413385218/fc12714ea3c156470937843cf5280453.webp) ![](https://file.jishuzhan.net/article/1742432923413385218/b272d9572b992cebbebb11255ea94bd9.webp)![](https://file.jishuzhan.net/article/1742432923413385218/7da33276d56b9c560f76ededc9a4372d.webp) ###### 存储过程: 存储过程是一组为了完成特定功能的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 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量) ![](https://file.jishuzhan.net/article/1742432923413385218/a37a3c698437f8353d47cfb87b267476.webp) ![](https://file.jishuzhan.net/article/1742432923413385218/6196371a1271fc781e538b6801204f87.webp) create procedure 存储过程名(inout 参数名 参数数据类型) begin select 字段 into 参数名 from 表 where 字段 = 参数名; end$$ set @变量名 = 传入的值; 设置传入的值 call 存储过程名(@变量名); 传入传出参数指定的值只能是变量名 select @变量名; 查看传出的值 ![](https://file.jishuzhan.net/article/1742432923413385218/87b8c37a3b9e8fa53fc261e9f89fb9b3.webp) ###### 存储过程的控制语句: 条件语句: if 条件表达式 then SQL语句序列1; else SQL语句序列2; end if;

相关推荐
DemonAvenger4 分钟前
Redis持久化策略对比:RDB与AOF的最佳实践与场景选择
数据库·redis·性能优化
新手小白*15 分钟前
Redis Sentinel哨兵集群
数据库·redis·sentinel
一 乐17 分钟前
商城推荐系统|基于SprinBoot+vue的商城推荐系统(源码+数据库+文档)
前端·数据库·vue.js·spring boot·后端·商城推荐系统
羑悻的小杀马特1 小时前
从零搭建群晖私有影音库:NasTool自动化追剧全流程拆解与远程访问协议优化实践
运维·数据库·自动化
TDengine (老段)3 小时前
杨凌美畅用 TDengine 时序数据库,支撑 500 条产线 2 年历史数据追溯
大数据·数据库·物联网·时序数据库·tdengine·涛思数据
葛小白16 小时前
C#数据类型:string简单使用
服务器·数据库·c#
污斑兔6 小时前
MongoDB的$sample是啥?
数据库·mongodb
马丁的代码日记8 小时前
MySQL InnoDB 行锁与死锁排查实战演示
数据库·mysql
拍客圈9 小时前
数据主站+副站做的设置
数据库
计算机学长felix9 小时前
基于SpringBoot的“面向校园的助力跑腿系统”的设计与实现(源码+数据库+文档+PPT)
数据库·spring boot·后端