数据库之触发器详解

一、触发器的概念

触发器是与表有关的数据库对象,在满足定义条件时触发,并执行触发器中定义的语句集合。触发器的这种特性可以协助应用在数据库端确保数据的完整性。

举个例子,比如你现在有两个表【用户表】和【日志表】,当一个用户被创建的时候,就需要在日志表中插入创建的log日志,如果在不使用触发器的情况下,你需要编写程序语言逻辑才能实现,但是如果你定义了一个触发器,触发器的作用就是当你在用户表中插入一条数据的之后帮你在日志表中插入一条日志信息。当然触发器并不是只能进行插入操作,还能执行修改,删除。
在这里插入图片描述
【NEW和OLD的使用】:
在这里插入图片描述

二、触发器的SQL相关操作

/**** 1、创建和使用触发器 ****/

// 创建触发器(AFTER INSERT表示触发器的动作:插入一条数据后要干的事,NEW和OLD分别表示将要新增或者修改删除的数据)
CREATE TRIGGER trig_book AFTER INSERT 
    ON t_book FOR EACH ROW 
	UPDATE t_bookType SET bookNum=bookNum+1 WHERE NEW.bookTypeId=t_bookType.id;

// 创建具有多个执行语句的触发器
DELIMITER || # DELIMITER ||  #将语句的分隔符改为||
CREATE TRIGGER trig_book AFTER DELETE
    ON t_book FOR EACH ROW
    BEGIN
	UPDATE t_bookType SET bookNum=bookNum-1 WHERE OLD.bookTypeId=t_bookType.id;
	INSERT INTO t_log VALUES(1,NOW(),"在book表中删除了一条数据");
    END ||
DELIMITER ; # 将语句的分隔符改回原来的分号";"

/**** 2、查看和删除触发器 ****/

SHOW TRIGGERS;

DROP TRIGGER trig_book;

三、触发器总结

1、触发器的限制

  • 触发程序不能调用将数据返回客户端的存储程序,也不能使用采用CALL语句的动态SQL语句,但是允许存储程序通过参数将数据返回触发程序,也就是存储过程或者函数通过OUT或者INOUT类型的参数将数据返回触发器是可以的,但是不能调用直接返回数据的过程。
  • 不能在触发器中使用以显示或隐式方式开始或结束事务的语句,如START TRANS-ACTION,COMMIT或ROLLBACK。

2、触发器的作用

(1)安全性—可以基于数据库的值使用户具有操作数据库的某种权利

  • 可以基于时间限制用户的操作,例如不允许下班后和节假日修改数据库数据。
  • 可以基于数据库中的数据限制用户的操作,例如不允许股票的价格的升幅一次超过10%。

(2)审计—可以跟踪用户对数据库的操作

  • 审计用户操作数据库的语句。
  • 把用户对数据库的更新写入审计表。

(3)实现复杂的数据完整性规则

  • 实现非标准的数据完整性检查和约束。触发器可产生比规则更为复杂的限制。与规则不同,触发器可以引用列或数据库对象。例如,触发器可回退任何企图吃进超过自己保证金的期货。
  • 提供可变的缺省值。

(4)自动计算数据值,如果数据的值达到了一定的要求,则进行特定的处理

3、触发器总结

触发器是基于行触发的,所以删除、新增或者修改操作可能都会激活触发器,所以不要编写过于复杂的触发器,也不要增加过多的触发器,这样会对数据的插入、修改或者删除带来比较严重的影响,同时也会带来可移植性差的后果,所以在设计触发器的时候一定要有所考虑。

触发器是一种特殊的存储过程,它在插入,删除或修改特定表中的数据时触发执行,它比数据库本身标准的功能有更精细和更复杂的数据控制能力。

参考:https://www.cnblogs.com/phpper/p/7587031.html
SQL SERVER触发器详解:https://www.jb51.net/article/238708.htm

  • 1
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Oracle触发器是一种特殊的存储过程,它会在数据库中的表发生特定事件时自动执行。触发器可以在INSERT、UPDATE和DELETE操作之前或之后自动运行,以便在数据更改时执行自定义逻辑。下面是Oracle触发器的详细介绍: 1. 触发器类型 Oracle触发器分为BEFORE和AFTER两种类型。BEFORE触发器会在执行INSERT、UPDATE或DELETE操作之前自动运行,而AFTER触发器则会在执行完操作后自动运行。 2. 触发器事件 触发器事件是触发器执行的事件类型。Oracle触发器支持以下事件类型: - INSERT:在插入新行之前或之后触发。 - UPDATE:在更新行之前或之后触发。 - DELETE:在删除行之前或之后触发。 3. 触发器语法 Oracle触发器的语法如下: CREATE [ OR REPLACE ] TRIGGER trigger_name { BEFORE | AFTER } { INSERT | UPDATE | DELETE } ON table_name [ FOR EACH ROW ] [ WHEN (condition) ] BEGIN -- 触发器代码 END; - trigger_name:触发器名称。 - BEFORE / AFTER:触发器类型。 - INSERT / UPDATE / DELETE:触发器事件类型。 - table_name:要监视的表名。 - FOR EACH ROW:指定触发器为每一行执行。 - WHEN:指定触发器执行的条件。 - 触发器代码:要执行的代码。 4. 触发器使用示例 下面是一个Oracle触发器的示例,它会在每次更新“employees”表中的“salary”字段时将更新记录插入到“salary_history”表中: CREATE OR REPLACE TRIGGER salary_history_trigger AFTER UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO salary_history (employee_id, old_salary, new_salary, update_time) VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE); END; 这个触发器会在每次更新“employees”表中的“salary”字段时自动执行,并将更新记录插入到“salary_history”表中,以便记录历史薪资信息。 总之,Oracle触发器可以在数据库中的表发生特定事件时自动执行,让我们能够通过自定义逻辑来处理数据变化。但是,在使用触发器之前应该仔细考虑其影响,以确保不会对系统性能和数据完整性造成负面影响。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值