MySQL基础-----sql指令2.0(函数,定义变量,存储过程,触发器)
创始人
2025-05-29 10:34:58

 目录

前言:

函数

1.无参数函数 

2.有参数的函数

定义变量

 1.全局变量

 2.局部变量

存储过程

 1.无参数存储过程

2.有参数存储过程

触发器


前言:

        sql 指令其实跟编程语言是差不多的,但是不能算作为编程语言,只是有编程语言的特殊是了。好了,那今天我们就一起学习sql语句中的函数,存储过程以及触发器等指令写法。下面就一起来看看吧!

 

函数

在sql指令中,我们可以去定义一个函数来使用,这样可以提高指令的复用性,提高效率。在sql指令中函数的返回值一般是返回一个结果,也就是说只能返回一个数据类型,不能返回多条数据,一般来讲函数是用于进一步筛选数据来使用的。

函数是用关键字function去修饰的,函数分为有参数函数和无参数函数,跟编程语言是差不多的,下面我会进行分别讲解

当前进行操作的表的数据,如图所示: 

 

1.无参数函数 

1.函数的定义方式:

-- 函数
delimiter 符号  -- 自定义语句结束符号
create function 函数名() returns 返回类型
begin
函数体
return 返回值
end 符号
delimiter;

2.函数的调用方式:

select 函数名();  -- 调用函数

 3.函数的删除:

drop function 函数名;

示例1:

-- 定义一个函数
delimiter $$
create function fun() returns char(10)
beginreturn (select name from user where id=12);
end $$
delimiter ;
-- 执行函数
select fun();-- 删除函数
drop function fun;

 结果如下所示:

 

 同时我们还发现这函数这里多了一个函数fun,这个函数就是我们创建的函数,当我们要使用的时候就直接去select fun(); 调用就行了,不需要再次创建,如果我们不想要这个函数的话就直接删除就行了,执行drop function fun; 指令

 这里要注意函数的返回类型,返回的结果要与类型相对应;同时如果返回字符串类型的时候还要去考虑返回的字符串长度!

2.有参数的函数

有参数的函数定义也就是在无参数的函数里面添加了参数值,跟编程语言的是一样的,如下所示:

-- 定义一个有参数函数
delimiter $$
create function func(cname char(10)) returns int
beginreturn (select pj from user where name=cname);
end $$
delimiter ;
-- 执行函数
select func('韩信');-- 删除函数
drop function func;

一般来说,我们都会去使用有参数函数的,这样更加灵活,方便满足我们的需求.

定义变量

这里的变量跟编程语言也是一样的,分为全局变量和局部变量,所谓的全局变量就是在函数体等功能体以外的区域去定义的变量,而局部变量就是在功能体以内去定义的变量

 1.全局变量

定义:

-- 格式:
set @变量名=值;

 当我们定义好了一个变量之后就要去执行这个变量,让这个变量实现赋值等相关操作:

set @变量名字=值;
-- 执行:
select @变量名字;

示例:

delimiter %%
create function fun(a int) returns char(10)
beginreturn (select name from user where id=a);
end %%
delimiter ;
-- 定义变量
set @y_id=4;
-- 执行变量
select @y_id;
select fun(@y_id);

 

 2.局部变量

局部变量跟全局变量不同,在局部不需要去执行,设置了之后就可以直接去使用了,是先用关键字去定义,然后就直接赋值

-- …………函数体declare 变量名 类型;set 变量名 = 值;
-- …………

 示例:

delimiter %%
create function fun() returns char(50)
begindeclare num int; -- 定义变量set num=(select pj from user where id=2); -- 对变量赋值return (select name from user where pj=num);
end %%
delimiter ;
select fun();

  

存储过程

存储过程是用关键字procedure修饰的,不同于函数的是,存储过程是可以返回多个结果的,没有特定说返回什么类型,同样存储过程也是分为有参数和无参数的。

 1.无参数存储过程

建立无参数存储过程

delimiter 符号  --自定义结束符号
create procedure 存储过程名字()
begin 存储过程
end 符号
delimiter ;

调用存储过程

call 存储过程名字(); -- 调用存储过程

删除存储过程

drop procedure;

示例:

-- 创建存储过程
delimiter &&
create procedure cue()
begin-- 这里可以执行多条语句以及返回多条结果update user set name='国服' where id = 14;select *from user;
end &&
delimiter ;
-- 调用存储过程
call cue();
-- 删除存储过程
drop procedure cue;

结果如下所示:

2.有参数存储过程

方法跟创建有参数的存储过程是一样的,只需要在里面添加参数即可,看示例:

-- 创建存储过程
delimiter &&
create procedure pro(mid int)
begin-- 这里可以执行多条语句以及返回多条结果update user set name='国服' where id > mid;select *from user;
end &&
delimiter ;
-- 调用存储过程
call pro(10);
-- 删除存储过程
drop procedure pro;

 

触发器

在sql语句中,我们可以设置一些机关指令,也就是触发器,当我们执行某一条语句的时候就会触发这个机关,然后就会执行里面的指令,这个就是触发器的过程。

 设置格式如下:

delimiter $$
create trigger 触发器名字 触发时间 触发条件 on
表名 for each row 
begin 触发事件
end $$
delimiter ;-- 触发时间  有两个 before 在触发条件之前  after 在触发条件之后
-- 触发条件 insert update delete
-- new 新数据 insert update
-- old 旧数据  update delete 

示例:

这里我有两个表,一个是学生表,另一个是班级表,建立一个触发器,当插入学生表数据的时候,班级表的人数会增加1个

class表:

student表: 

#创建一个触发器
delimiter $$
create trigger mech after insert on student for each row
begindeclare oldnum int;set oldnum=(select num from class where cid=NEW.cnum);update class set num=oldnum+1 where cid = NEW.cnum;
end $$
delimiter ;
#插入数据,会引发触发器
insert into student(name,cnum) values ('qq',1);
#删除这个触发器
drop trigger mech;

执行后的结果:

class表中的班级1 人数多了一位。 如果我们去一次性插入多个数据的时候,那么班级表同样也会增加相对应的数量,触发器在mysql后端是非常常见的,可以用与数据的统计等作用。

好了,以上就是本期的全部内容了,我们下一期再见!

分享一张壁纸:

相关内容

热门资讯

湖北省全国百强县篮球联赛收官 ... (来源:中国体育报)转自:中国体育报  12月13日,2025年湖北省全国百强县篮球联赛迎来最后一轮...
患儿在宁波大学附属妇女儿童医院... 本文转自【健康宁波】;情况通报2025年11月14日晚,患儿许某某在宁波大学附属妇女儿童医院(以下简...
特朗普各种打压之下,可再生能源...   炒股就看金麒麟分析师研报,权威,专业,及时,全面,助您挖掘潜力主题机会!   来源:华尔街见闻...
澳总理召开国家安全委员会紧急会... △当地时间14日傍晚,澳大利亚悉尼邦迪滩发生枪击事件,造成多人死伤总台记者14日获悉,澳大利亚总理阿...
【甘快看·强信心 看发展】甘肃... 【强信心看发展】甘肃新能源年发电量首次突破900亿千瓦时制图:石代学每日甘肃网讯(新甘肃·甘肃日报记...