一.存储过程
解释:一段SQL语句集合。
存储过程参数(核心):
- in:表示输入参数
- out:表示输出参数
- inout:既可以表示输入参数,也可以表示输出参数
数据源:学生成绩表
实现功能:比较两个学生成绩输出结果
delimiter $$create procedure cp(in id1 int,in id2 int,out res int)begindeclare score1,score2 double;select score into score1 from student_score where sno=id1;select score into score2 from student_score where sno=id2;if score1>score2 thenset res=1;elseset res=0;end if;end $$delimiter ;

二.函数
定义:一段SQL语句集合。
与存储过程区别:
- 存储函数不再拥有输出参数,因为本身就是输出参数
- 不能用
call语句调用存储函数 - 存储函数必须包括一条
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)
三.触发器
解释:触发器是一种特殊类型的存储过程,它不同于存储过程,主要是通过事件触发而被执行的,即不是主动调用而执行的功能:删除学生成绩后删除班级信息
删除前数据(学生表与班级表)
创建触发器
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)
四.事件
解释:在相应的时刻执行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 ;

