数据库 触发器和存储过程的简单介绍
目录 :
-
1 . 什么是触发器,它的作用,以及为什么要使用触发器
-
2.触发器的语法规则
-
3.储存过程的概念
-
4.存储过程的语法规则
(一)、 什么是触发器,它的作用,以及为什么要使用触发器
- 触发器(Trigger)是数据库管理系统中的一种特殊的存储过程,它在特定的数据库事件(例如插入、更新或删除操作)发生时自动执行。触发器可以在数据库中实现复杂的业务逻辑和数据完整性检查,从而保证数据的一致性和正确性。这里举一个简单的例子:有一个学生成绩的表,和统计各科平均分的表,如果我们把一个学生的成绩删除了,那么对于的各科平均分的表是不是也要进行改变,毕竟少了一个人。
- 触发器可以在数据库中实现以下功能:
- 数据完整性检查:可以使用触发器来确保数据库中的数据满足一定的条件。例如,可以创建一个触发器,在每次插入或更新数据时检查数据的完整性,例如检查数据是否符合指定的格式或范围。
- 数据库审计:可以使用触发器来记录数据库的操作,例如记录每次插入、更新或删除数据的时间和用户信息,以便进行审计和追踪。
- 数据库复制:可以使用触发器来实现数据库的复制和同步。例如,在主数据库上创建一个触发器,在每次插入或更新数据时将数据复制到备份数据库中。
- 数据库日志:可以使用触发器来记录数据库的操作,并将操作信息存储在日志文件中,以便进行故障排除和恢复。
( 二 )、 触发器的语法规则
- 创建触发器(语法)
create trigger trigger_name before | after triger_event on tabelName for each row trigger_STMT;
# triger_event表示触发事件(也就是触发的条件),包括delete、insert 、update
# before | after 指定触发时间
# trigger_STMT 表示触发的什么事件
- demo
create trigger tri_insert_student after insert on student for each row update class set count=count+1 where class.id=new.id;
#当我们在学生表里面插入一个学生后,班级表的人数要+1,
- 提示 insert ,只有new是合法的,update,只有old是合法的,可以参考上面的demo。
- 包含多条执行语句
create trigger trigger_name before | after triger_event on tabelName for each row begin trigger_STMT end;
delimiter $$ 可设置结束符
- 查看触发器 : show triggers ;
( 三 )、存储过程的概念
-
存储过程(Stored Procedure)是一组预编译的SQL语句和控制结构,它们被存储在数据库中并可以被多次调用。存储过程通常用于执行特定的任务或操作,例如更新数据库中的数据、查询数据、计算数据等。
-
存储过程通常由以下组成部分:
- 参数列表:存储过程可以接受输入参数和输出参数。输入参数用于向存储过程传递数据,输出参数用于从存储过程返回数据。
- SQL语句和控制结构:存储过程可以包含多个SQL语句和控制结构,例如SELECT、INSERT、UPDATE、DELETE、IF、WHILE等。
- 返回值:存储过程可以返回一个或多个值,这些值可以是标量值(例如整数、字符串等)或记录集。
-
我们为什么要使用存储过程:
- 存储过程通常由以下组成部分:
-
参数列表:存储过程可以接受输入参数和输出参数。输入参数用于向存储过程传递数据,输出参数用于从存储过程返回数据。
-
SQL语句和控制结构:存储过程可以包含多个SQL语句和控制结构,例如SELECT、INSERT、UPDATE、DELETE、IF、WHILE等。
-
返回值:存储过程可以返回一个或多个值,这些值可以是标量值(例如整数、字符串等)或记录集。
- 存储过程的优点包括:
-
提高数据库性能:存储过程可以预编译并缓存在数据库中,从而提高数据库的性能和响应速度。
-
提高数据安全性:存储过程可以限制用户对数据库的访问权限,从而提高数据的安全性
-
-
创建存储的语法
create procedure procedure_name([proc_param[]]) routine_body;
# proc_param(参数),其中的每个参数的语法 [in | out |inout ]param_name type;
# routine_body 过程题
- 但看语可能看得不是很清晰,很懵逼,我们来看一个实列
delimiter $$
create procdedure pro_delete_student (in sid int)
begin
declare cid int; #定义一个零时变量
select class_id into cid from student where id=sid; #设置变量,将查询到的class_id的值 给cid(我们的临时变量)
delete from grade where id=sid; #删除成绩表中的记录
end;
$$
delimiter ;
call pro_delete_student(2); #调用存储过程
补充
1. 定义变量 : 基本语法:
declare cid int deffault 10 ; #定义一个变量,默认值是10
2. 为变量赋值
set var_name=exper;
set vae_name=88;