news 2026/9/12 20:37:38

mysql存储

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
mysql存储

存储过程
一、存储过程介绍
1、定义:存储过程是实现某个特点功能的sql语句的集合,编译后的存储过程会保存在数据中,通过存储过程的名称反复的调用执行
2、存储过程的优点
(1)存储创建以后就可以反复的调用,不需要写复杂的语句
(2)存储过程可以添加输入和输出参数实现变量 ;例如:in out inot
(3)存储过程可以加入控制语句,增加sql语句的功能性和灵活 ; if
(4)创建存储过程可以减少数据开发人员的工作量
(5)防止sql注入;
(6)造数据;(重点)

二、存储过程的格式
(1)创建存储过程
格式:

#分隔符
delimiter//
drop PROCEDURE if exists 存储名称; #判断是否存在存储,存在删除
create PROCEDURE 存储名称()
BEGIN
sql语句
END
//

call 存储名称()
案例:

#分隔符
delimiter //
drop PROCEDURE if exists cc1;
CREATE PROCEDURE cc1()
BEGIN
select * from emp ;
select * from dept;
select * from student;
END
//

call cc1()

(2)查看已经建好存储过程
格式:
show create procedure 存储名称 ;
案例:
show create procedure cc1 ;
(3)查看所有的存储过程
格式:
show procedure status ;
案例:
show procedure status ;
(4)删除存储过程
格式:
drop procedure 存储名
案例:
drop procedure c1

(5)判断是否存在新建名的存储,存在则删除,这条语句增强健壮性
drop PROCEDURE if EXISTS 存储名;
案例:
drop PROCEDURE if EXISTS cc1;

三、存储过程的运用
(1)创建无参数存储过程
案例:
delimiter//
drop PROCEDURE if EXISTS cum;
create PROCEDURE cum()
BEGIN
select * from emp where dept2=101;
END
//

call cum()
(2)创建带有in的存储过程
案例2:
delimiter//
drop PROCEDURE if EXISTS cum;
create PROCEDURE cum(in x int) #in是传入参数
BEGIN
select * from emp where dept2=x;
END
//

call cum(102)
(3)创建带有out 的存储过程
delimiter//
drop PROCEDURE if EXISTS cum;
create PROCEDURE cum(out y int)
BEGIN
select age into y from emp where sid=1565;
END
//

call cum(@y)
select @y 显示变量值
注意点:
用户变量:
方式1:
set @ 变量名:=值
或者
set @变量名=值
select @变量名:=值
方法2:
通过查询结果为变量值
select 字段名 into 变量名 form 表名 where 条件
方法3:
declare 声明 变量
例如:
declare i int default 0 ;


(4)创建带有in ,out 的存储过程
案例:
delimiter//
drop PROCEDURE if EXISTS cum;
create PROCEDURE cum(in x int,out y int)
BEGIN
select age into y from emp where sid=x;
END
//

call cum(1776,@y)
select @y

(5)创建带有inout 的存储过程
案例:
delimiter//
drop PROCEDURE if EXISTS cum;
create PROCEDURE cum(inout m int)
BEGIN
set m=m+1;
END
//

set @m=2
call cum(@m)
select @m

四、存储造数据
1、循环语句while语句(重点讲)
格式:while 条件 do
sql语句
end while
(2)loop ....end loop
(3)repeat until ....end repeat

2、造数据
(1)新建一个表
例如:
create table s9(id int(10) PRIMARY key ,name VARCHAR(20)) ;

(2)插入固定的数据:(0-9)
select * from s9 ;
create table s10(id int(10) ,name VARCHAR(20)) ;
delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs()
BEGIN
DECLARE i int DEFAULT 0;
while (i<10) DO
INSERT into s10(id) VALUES(i);
set i=i+1;
END WHILE;
select *from s9;
END
call zs()
(2)插入指定的数量的数据(100或1000)
create table s10(id int(10) ,name VARCHAR(20)) ;
delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs(in x int)
BEGIN
DECLARE i int DEFAULT 0;
while (i<x) DO
INSERT into s10(id) VALUES(i);
set i=i+1;
END WHILE;
select *from s10;
END
call zs(1000)
(3)插入数据,将表中已经存在的数据进行统计,在已有的基础上添加数据
delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs(in x int)
BEGIN
DECLARE i int DEFAULT (select count(*) from s10);
while (i<x) DO
INSERT into s10(id) VALUES(i);
set i=i+1;
END WHILE;
select *from s10;
END
call zs(15)
(4)插入数据,每次会新建表,重新插入数据

delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs(in x int)
BEGIN
DECLARE i int DEFAULT 0;
drop table if EXISTS s10 ;
create table s10(id int(10),name VARCHAR(20)) ;

while (i<x) DO
INSERT into s10(id) VALUES(i);
set i=i+1;
END WHILE;
select *from s10;
END
call zs(3)

五、 if语句
(1)if单分
格式:
if 条件 THEN
sql语句1
ELSE
sql语句2
end IF;
注意点一个if对应一个end if
案例:
delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs(in x int)
BEGIN
if x=10 THEN
select * from emp;
ELSE
select * from dept;
end IF;
end
//

call zs(1)
(2)if多分支
if 条件1 then
sql1
else if 条件2 then
sql2
else if 条件3 then
sql3
else if 条件4 then
sql4
else
sql5
end if;
end if;
end if;
end if;

案例:
delimiter//
drop PROCEDURE if EXISTS zs;
create PROCEDURE zs(in x int)
BEGIN
if x=10 THEN
select * from emp;
else if x=1 THEN
select * from mm;
else if x=0 THEN
select * from nn;
else if x=100 THEN
select * from xx;
ELSE
select * from dept;
end IF;
end if;
end if;
end if;
end
//

call zs(99)

作业:

面试题:根据student学生表去写
1.当传入的参数(大于0)小于等于表里面数据的条数时,则根据分组显示班级的总成绩
2.当传入的参数大于表里面数据的条数时,则统计表里面的数据有多少条
3.当传入其他,则查询表里面的所有数据

delimiter//
drop PROCEDURE if EXISTS pd;
create PROCEDURE pd(in x int)
BEGIN
DECLARE i int DEFAULT(select count(*) from student2);
if x>0 and x<=i THEN
select sum(english+chinese+math) from student2 group by class ;
ELSE if x>i THEN
select count(*) from student2;
ELSE
select * from student2 ;
end if;
end IF;
END
//

call pd(-1)

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 20:35:48

openbmc中如何对日期与时间模块进行GUI自动化测试?

当前经过调整适配后&#xff0c;测试通过率为4/15&#xff0c;失败11个。两个原因&#xff0c;第一个是测试用例是3-6年前写的&#xff0c;文本之类的有改动&#xff0c;第二个问题是当前的界面通用关键字没考虑导航窗格被折叠的因素&#xff0c;导致CI失败。用例 1&#xff1a…

作者头像 李华
网站建设 2026/9/12 20:35:25

EPI生态溢价指数:理论框架与价值实现路径解析

做生态价值评估这些年&#xff0c;我越来越觉得一个核心问题绕不开&#xff1a;生态产品到底值多少钱&#xff0c;这个价值又该怎么落到具体的经济回报上。很多地方林草覆盖率高、水质好、空气优&#xff0c;可这些“好生态”并没有真正变成可量化的收益&#xff0c;老百姓守着…

作者头像 李华
网站建设 2026/9/12 20:27:25

STM32H743 SPI中断方式读写W25QXX例程与状态机设计

简介&#xff1a;基于STM32H743单片机实现串行SPI Flash W25QXX读写操作的完整例程&#xff0c;面向嵌入式开发者与入门学习者&#xff0c;解决高速非易失性存储扩展需求。源码包共1120个文件&#xff0c;约17.76MB&#xff0c;以C语言源文件&#xff08;573个&#xff09;、头…

作者头像 李华
网站建设 2026/9/12 20:24:57

Video2X 免费 AI 视频超分:一条命令把 480p 老片拉到 4K

Video2X 免费 AI 视频超分&#xff1a;一条命令把 480p 老片拉到 4K 【免费下载链接】video2x A machine learning-based video super resolution and frame interpolation framework. Est. Hack the Valley II, 2018. 项目地址: https://gitcode.com/GitHub_Trending/vi/vid…

作者头像 李华