数据库编程

本文深入介绍了MySQL数据库的高级特性,包括系统变量、用户变量和局部变量的使用,详细讲解了流程控制结构如判断、循环和跳转语句,并探讨了函数的自定义及调用,以及存储过程的创建、调用和管理。通过这些内容,读者能够提升对MySQL数据库的操作和管理效率。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >


\quad mysql除了进行增删改查,还提供了变量,函数,流程控制,存储过程,触发器等功能,灵活地满足用户对数据库的需求,提高用户对数据库的操作和管理效率

变量

\quad 根据变量的作用范围,可以将变量划分为系统变量(全局变量),用户变量(会话变量)和局部变量。

1.系统变量

\quad 指的是系统内部定义的变量

-- 查看系统变量
show variables [like 匹配模式];

在这里插入图片描述

-- 查看指定名称的系统变量的值
select @@系统变量名

在这里插入图片描述

-- 修改系统变量
-- 只对本次连接的客户端有效,局部修改
set 变量名=-- 对当前正连接的客户端无效,对之后新连接的客户端永久有效,全局修改
set global 变量名=set @@global.变量名=

2.用户变量

\quad 指的是用户自定义的变量,与当前客户端绑定,仅对当前用户使用的客户端生效。用户变量由@和变量名组成。
\quad 用户变量在定义时必须赋值。 三种赋值方式:

-- 方式一
set @变量名=-- 方式二:要用:= 不能用= ,否则得到的是null
select @变量名 :=字段/字段函数 from 表名 [where ....];
-- 方式三,变量只能保存一个数据,所有该方式返回的结果只能是一行记录,而不能是多条记录
select 字段/字段函数 from  表名 [where ....] into @变量名;

在这里插入图片描述在这里插入图片描述

3.局部变量

\quad 局部变量的作用范围仅在符合语句begin和end之间,在该语句之外的任何地方都不能被获取和修改,方便在函数和存储过程中保存需要操作的数据。

1)定义

declare 变量名1[,变量名2,...] 数据类型 [default 默认值]
-- 当同事定义多个局部变量时,它们必须是共用同一数据类型,省略默认值是变量的初值为null

2)修改

set 变量名=

流程控制

\quad mysql提供了判断语句(if,case),循环语句(while,repeat,loop)和跳转语句(leave,iterate)

1.判断语句

1) if语句

1.适用于sql语句的if语法——在一条sql语句中使用
-- 条件表达式为真,返回表达式1的值,否则返回表达式2的值
if(条件表达式,表达式1,表达式22.适合函数,存储过程等的if语法
-- 语句列表必须为一个或多个sql语句,不允许为空
if 条件表达式 then 语句列表
[elseif 条件表达式 then 语句列表]
...
[else 语句表达式]
end if

2)case语句

1)适合sql语句的case语法
# 法一:
case 条件表达式 
when 表达式 then 结果
[when 表达式 then 结果]
...
[else 结果]
end
# 法二:
case 
when 条件表达式 then 结果
...
[when 条件表达式 then 结果]
[else 结果]
end

2) 适合sql程序的case语法
case 条件表达式
when 表达式 then 语句列表
[when 表达式 then 语句列表]
...
[else 语句列表]
end case
# 法二:
case 
when 条件表达式 then 语句列表
...
[when 条件表达式 then 语句列表]
[else 语句列表]
end case

循环语句

1)loop

/*
	语句列表为循环执行的语句,在其中需要给出结束循环的条件判断,否则会出现死循环
	利用 leave 标签的跳转语句跳出循环
*/
[标签:]loop
语句列表
end loop[标签];

2)repeat语句

/*
无条件执行一次语句列表,然后再判断until后的条件表达式,为真则结束循环,否则继续。
*/
[标签:] repeat
语句列表
until 条件表达式 
end repeat [标签]

3)while语句

/*
先判断循环条件,为真执行语句列表,否则结束循环
*/
[标签:]while 条件表达式 do
语句列表
end while [标签]

3.跳转语句

/*
跳转语句用于实现程序执行过程的流程跳转——leave和literate 
literate只能用于循环体,而leave还可以在begin...end里使用
literate 用于结束本次循环
leave用于终止循环,跳出循环体
*/

literate 标签;
leave 标签;

函数

在这里插入图片描述

\quad mysql除了提供了丰富的内置函数外,还支持用户自定义函数,用于实现某种功能。它由若干条语句组成语句块,每条语句都是一个符合语句定义规范的个体,需要语句结束符" ; ",而mysql一旦遇见语句结束符就会自动开始执行,但函数是一个整体,只有被调用时才会被执行,所以在定义函数时,需要临时修改语句结束符。

-- 新结束符常用 $$
delimiter $$
-- 自定义函数
create function 函数名([参数名 数据类型,...) returns 返回类型
begin
函数体
return 返回值数据;  # 类型与returns后一致
end
$$
-- 恢复原结束符
delimiter ;

-- 调用函数
select 函数名(实参列表);

-- 删除函数
drop function [if exists] 函数名;

存储过程

1)创建存储过程

/*
in 表示输入参数
out 表示删除参数,初始值为null
inout 表示输入输出参数,即参数在调用时获得实参值,在操作结束将数据返回给调用者
*/
delimiter $$
create procedure 存储过程名([in | out | inout 参数名称 参数列表])
begin
过程体
end $$
delimiter ;

2)查看存储过程

show procedure status [like 匹配模式]

3)调用存储过程

call 存储过程名([实参列表]);

注意:输出参数名前要加@
在这里插入图片描述

触发器

在这里插入图片描述在这里插入图片描述

1)定义触发器
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yun_gao_

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值