MySql学习-进阶-存储过程

本文详细介绍了MySQL的存储过程,包括其特点、创建、调用、查看、删除等操作。此外,还讲解了变量(系统变量、用户定义变量、局部变量)、条件控制(if、case、循环)、游标、错误处理等内容,为数据库编程提供了全面的指导。

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

链接: 学习视频

存储过程

介绍

介绍

特点

特点


创建

创建

delimiter $$
create procedure p1()
begin
	select * from spj;
end;
$$

命令行和workbench中要加

delimiter $$         

$$

调用

call p1();

结果


查看

查看

select * from INFORMATION_SCHEMA.ROUTINES where ROUTINE_SCHEMA = 'XXX';

查看结果1

show create procedure p2();

查看结果2


删除

删除

drop procedure if exists p2;

删除结果


变量

系统变量

变量介绍

  1. 查看系统变量
show variables;

show_variables

show session variables like 'auto%';

show_like

select @@auto_generate_certs;

select_@@

  1. 设置系统变量
set 系统变量名 =;
set @@系统变量名 =;

用户定义变量

用户定义变量介绍

  1. 赋值
set @变量名 =;
set @变量名 :=;
set @变量名 =,@变量名 =;
select @变量名 :=;
#将查询到的结果赋值给变量
#例:
select count(*) into @变量名 from 表名;

  1. 使用
select @变量名;
select @变量名,@变量名;

用户定义变量_注意


局部变量

局部变量介绍

#在begin end块内声明和使用
#变量类型就是数据库的字段类型
declare 变量名 变量类型

#对局部变量的赋值
#其实和对用户自定义变量赋值是差不多的
set @变量名 =;
set @变量名 :=;

if判断

if_语法

#总的来说很简单。
if 条件1 then
	...
elseif 条件2 then
	...
elseif 条件3 then
else
	...
end if;

参数

参数介绍
参数用法

#这东西应该也很简单吧

#在创建中-------------------
create procedure 存储过程名称(in/out/inout 参数名 参数类型,in/out/inout 参数名 参数类型)
begin
	--sql语句
end;
#使用中----------------------------
#值可以是用户自定义变量名-----------
call 存储过程名称(参数名: 值,参数名: 值);


case

case语法

#学过某一语言的应该看一眼就会了
case 某值
	when1 then 代码块
	when2 then 代码块
	else 代码块
end case;
---------------------------------
case
	when 条件表达式1 then 代码块
	when 条件表达式2 then 代码块
	else 代码块
end case;

循环

while

while

#这个也很简单,看一眼就会
while 条件 do
	代码块
end while;

repeat

repeat

#这个也很简单---------
repeat
	代码块
	until 条件
end repeat;

loop

loop

#也简单-------------------------
标记名: loop
	代码块
end loop 标记名;
#这部分相当于break;continue;
leave label;	#退出循环
iterate label;	#进入下一次循环


游标

  1. 应对于接收结果集,这就是游标的作用。
  2. 游标其实是数据类型

游标

#声明游标-------------
declare 游标名称 cursor for 查询语句;
#打开游标----------------
open 游标名称;
#获取游标记录-----------
fetch 游标名称 into 变量;#要在循环内用。
#关闭游标----------
close 游标名称;

游标例子
注意:

  1. 游标声明应在变量声明后面。
  2. while true是死循环,后面会用条件处理程序解决。

条件处理程序

条件处理程序介绍

#声明----------------------
declare handler_action handler for condition_value 代码块;
#handler_action--------------
	continue#继续
	exit	#终止
#condition_value
	SQLSTATE sqlstate_value #状态码
	SQLWARNING				#01开头,SQLSTATE代码简写
	NOT FOUND				#02开头,SQLSTATE代码简写
	SQLEXCEPTION			#未被01,02捕获的SQLSTATE代码简写

例子
在报错后会自动进入游标判别,然后退出.


好的,关于 Docker 数据卷的进阶篇,我可以为你提供以下内容: 1. 数据卷的类型 Docker 数据卷有三种类型:主机挂载、匿名卷、命名卷。其中,主机挂载是将主机上的目录挂载到容器中;匿名卷是在容器内部创建的临时卷;命名卷则是给卷起一个名字,并将其保存在 Docker 数据卷存储区中。 2. 数据卷的备份与恢复 我们可以使用 Docker Compose 中的 `docker-compose.yml` 文件来定义数据卷的备份和恢复。具体方法是,在 `volumes` 字段中定义卷及其备份路径,然后在 `services` 字段中指定容器和对应的卷名称。 例如: ``` version: "3" services: db: image: mysql volumes: - db_data:/var/lib/mysql command: --default-authentication-plugin=mysql_native_password backup: image: backup volumes: - /path/to/backup:/backup - db_data:/data/db command: backup.sh volumes: db_data: ``` 以上代码中,我们定义了一个 `db` 服务和一个 `backup` 服务。其中,`db` 服务使用了名为 `db_data` 的命名卷,并挂载到容器的 `/var/lib/mysql` 目录中;`backup` 服务则使用了两个卷,一个是挂载到宿主机上的 `/path/to/backup` 目录,用于保存备份文件;另一个是使用了 `db_data` 命名卷,并挂载到容器的 `/data/db` 目录中,用于备份数据。最后,我们在 `backup` 服务中执行了备份脚本 `backup.sh`。 3. 数据卷的共享 我们可以将一个数据卷挂载到多个容器中,实现数据的共享。例如,我们可以将一个命名卷挂载到 `web` 和 `db` 两个服务中,这样它们就可以共享数据了。 ``` version: "3" services: web: image: nginx volumes: - web_data:/usr/share/nginx/html db: image: mysql volumes: - db_data:/var/lib/mysql - web_data:/var/www/html volumes: db_data: web_data: ``` 以上代码中,我们定义了一个 `web` 服务和一个 `db` 服务。其中,`web` 服务使用了名为 `web_data` 的命名卷,挂载到容器的 `/usr/share/nginx/html` 目录中;`db` 服务则使用了 `db_data` 和 `web_data` 两个卷,分别挂载到容器的 `/var/lib/mysql` 和 `/var/www/html` 目录中,实现了数据的共享。 希望以上内容能够对你有所帮助!
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

爱睡觉更爱学习

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

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

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

打赏作者

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

抵扣说明:

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

余额充值