数据库 触发器和存储过程的简单介绍

数据库 触发器和存储过程的简单介绍
目录 :
  • 1 . 什么是触发器,它的作用,以及为什么要使用触发器

  • 2.触发器的语法规则

  • 3.储存过程的概念

  • 4.存储过程的语法规则

(一)、 什么是触发器,它的作用,以及为什么要使用触发器
  • 触发器(Trigger)是数据库管理系统中的一种特殊的存储过程,它在特定的数据库事件(例如插入、更新或删除操作)发生时自动执行。触发器可以在数据库中实现复杂的业务逻辑和数据完整性检查,从而保证数据的一致性和正确性。这里举一个简单的例子:有一个学生成绩的表,和统计各科平均分的表,如果我们把一个学生的成绩删除了,那么对于的各科平均分的表是不是也要进行改变,毕竟少了一个人。
  • 触发器可以在数据库中实现以下功能:
    1. 数据完整性检查:可以使用触发器来确保数据库中的数据满足一定的条件。例如,可以创建一个触发器,在每次插入或更新数据时检查数据的完整性,例如检查数据是否符合指定的格式或范围。
    2. 数据库审计:可以使用触发器来记录数据库的操作,例如记录每次插入、更新或删除数据的时间和用户信息,以便进行审计和追踪。
    3. 数据库复制:可以使用触发器来实现数据库的复制和同步。例如,在主数据库上创建一个触发器,在每次插入或更新数据时将数据复制到备份数据库中。
    4. 数据库日志:可以使用触发器来记录数据库的操作,并将操作信息存储在日志文件中,以便进行故障排除和恢复。
( 二 )、 触发器的语法规则
  • 创建触发器(语法)
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语句和控制结构,它们被存储在数据库中并可以被多次调用。存储过程通常用于执行特定的任务或操作,例如更新数据库中的数据、查询数据、计算数据等。

  • 存储过程通常由以下组成部分:

    1. 参数列表:存储过程可以接受输入参数和输出参数。输入参数用于向存储过程传递数据,输出参数用于从存储过程返回数据。
    2. SQL语句和控制结构:存储过程可以包含多个SQL语句和控制结构,例如SELECT、INSERT、UPDATE、DELETE、IF、WHILE等。
    3. 返回值:存储过程可以返回一个或多个值,这些值可以是标量值(例如整数、字符串等)或记录集。
  • 我们为什么要使用存储过程:

      -  存储过程通常由以下组成部分:
    
    1. 参数列表:存储过程可以接受输入参数和输出参数。输入参数用于向存储过程传递数据,输出参数用于从存储过程返回数据。

    2. SQL语句和控制结构:存储过程可以包含多个SQL语句和控制结构,例如SELECT、INSERT、UPDATE、DELETE、IF、WHILE等。

    3. 返回值:存储过程可以返回一个或多个值,这些值可以是标量值(例如整数、字符串等)或记录集。

      • 存储过程的优点包括:
    4. 提高数据库性能:存储过程可以预编译并缓存在数据库中,从而提高数据库的性能和响应速度。

    5. 提高数据安全性:存储过程可以限制用户对数据库的访问权限,从而提高数据的安全性

  • 创建存储的语法

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;
  • 5
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

零二年的冬

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值