存储过程
存储过程是一组为了完成特定功能的 SQL 语句集,经编译创建并保存在数据库中,用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。
简单的说存储过程就是具有名字的一段代码。
存储过程的创建
CREATE PROC[EDURE] 存储过程名( [参数列表[,…]]) BEGIN 过程体; END
存储过程的参数
IN:输入参数
OUT:输出参数
INOUT:输入输出参数
调用存储过程
call 存储过程名(参数列表);
存储过程的查询和删除
查询已经创建过的存储过程:
SHOW PROCEDURE STATUS WHERE db='数据库名';
查看存储过程的详细定义信息:
SHOW CREATE PROCEDURE 数据库.存储过程名;
删除存储过程:
DROP PROCEDURE [IF EXISTS] 数据库名.存储过程名;
########## 创建存储过程p_grade,实现通过输入的学号判断该生的成绩评价 ##########
DELIMITER //
CREATE PROCEDURE p_grade(IN sno VARCHAR(10), OUT grade VARCHAR(10))
BEGIN
-- 声明变量
DECLARE avg_score DECIMAL(5, 2);
-- 查询指定学号的所有成绩
SELECT sum(score) INTO avg_score
FROM sc
WHERE sno = sno;
-- 判断成绩评价
IF avg_score >= 180 THEN
SET grade = '优秀';
ELSEIF avg_score <=179 and avg_score >=160 THEN
SET grade = '良好';
ELSEIF avg_score >= 140 and avg_score<=159 THEN
SET grade = '中等';
ELSEIF avg_score <=139 and avg_score >=120 THEN
SET grade = '及格';
ELSE
SET grade='不及格';
END IF;
END //
DELIMITER ;
CALL p_grade('s004',@grade);
SELECT @grade;
触发器
触发器是一种特殊类型的存储过程,可以用来对数据表实施复杂的完整性约束,实现表记录的自动维护,保持数据的一致性,当触发器所保护的数据发生改变时,触发器将会被自动激活,即触发器不能由应用程序显式地调用执行。
触发器的触发事件
**激活触发器的事件包括INSERT、UPDATE和DELETE事件。 **
触发器的触发时间
触发器的触发时间有两种:before与after。
触发器的优点
- 触发器是自动的
- 触发器可以级联修改数据库中所有相关的表,自动触发其它与之相关的操作;
- 触发器可以强制限制
创建触发器命令
CREATE TRIGGER 触发器名 触发时间 触发事件 ON 表名 FOR EACH ROW < 触发体 >