一.存储过程

解释:一段SQL语句集合。
存储过程参数(核心):

  1. in:表示输入参数
  2. out:表示输出参数
  3. inout:既可以表示输入参数,也可以表示输出参数

数据源:学生成绩表
微信图片_20211008105225.jpg
实现功能:比较两个学生成绩输出结果

  1. delimiter $$
  2. create procedure cp(in id1 int,in id2 int,out res int)
  3. begin
  4. declare score1,score2 double;
  5. select score into score1 from student_score where sno=id1;
  6. select score into score2 from student_score where sno=id2;
  7. if score1>score2 then
  8. set res=1;
  9. else
  10. set res=0;
  11. end if;
  12. end $$
  13. delimiter ;

微信图片_20211008105300.jpg

二.函数

定义:一段SQL语句集合。
与存储过程区别:

  1. 存储函数不再拥有输出参数,因为本身就是输出参数
  2. 不能用call语句调用存储函数
  3. 存储函数必须包括一条return语句,存储过程没有

实现功能:输出学生成绩对应学号

mysql> delimiter $$
mysql> create function select_sno(score_in double)
    -> returns varchar(20)
    -> deterministic
    -> begin
    -> return (select sno from student_score where score=score_in);
    -> end$$
Query OK, 0 rows affected (0.03 sec)

微信图片_20211008105608.jpg

三.触发器

解释:触发器是一种特殊类型的存储过程,它不同于存储过程,主要是通过事件触发而被执行的,即不是主动调用而执行的功能:删除学生成绩后删除班级信息

删除前数据(学生表与班级表)
微信图片_20211008110100.jpg
创建触发器

delimiter $$
create trigger score_del after delete
on student_score for each row
begin
  delete from student_grade where sno=old.sno;
end$$
delimiter ;

触发器执行


触发器执行

mysql> delete from student_score where sno='001';
Query OK, 1 row affected (0.04 sec)

微信图片_20211008110235.jpg

四.事件

解释:在相应的时刻执行SQL语句
功能:实现每隔一分钟成绩加2

delimiter $$
create event event_update on schedule every 1 minute
starts curdate() +interval 1 minute
do
  begin
    update student_score set score=score+2 where sno='002';
  end$$
delimiter ;

微信图片_20211008110404.jpg