数据库:触发器,作用,分类,触发器与存储过程的区别

触发器:

1)触发器是一种特殊类型的存储过程,它由事件触发,而不是程序调用或手工启动,当数据库有特殊的操作时,这些操作由数据库中的事件来触发,自动完成这些SQL语句。

2)使用触发器可以用来保证数据的有效性和完整性,完成比约束更复杂的数据约束

3)触发器可以查询其他表,而且可以包含复杂的 SQL 语句。 它们主要用于强制服从复杂的业务规则或要求。 例如,您可以根据客户当前的帐户状态,控制是否允许插入新订单。
4)触发器也可用于强制引用完整性,以便在多个表中添加、更新或删除行时,保留在这些表之间所定义的关系。

作用:

1)触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。

2)触发器可以强制比用 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。

3)触发器还可以强制执行业务规则

4)触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。

触发器和存储过程的区别:

触发器 存储过程
当某类数据操作DML语句发生时隐式地调用 从一个应用或过程中显示地调用
在触发器体内禁止使用COMMIT和ROLLBACK语句 在过程体内可以使用所有PL/SQL块中都能使用的SQL语句,包括COMMIT和ROLLBACK语句
不能接受参数输入 可以接受参数输入
扫描二维码关注公众号,回复: 3192214 查看本文章

分类:

根据SQL语句的不同,触发器可分为数据操作语言DML触发器和数据定义语言DLL触发器。通常说的触发器就是DML触发器。

1)DML触发器是当数据库服务器发生数据操作语言事件时执行的存储过程,有After 和 Instead Of 这两种触发器。

             1. After 触发器被激活触发是在记录改变之后进行的一种触发器(只有执行某一操作之后才触发)。只能定义在表上。

             2. Instead Of 触发器是在记录变更之前,去执行触发器本身所定义的操作,而不是执行原来SQL语句里的操作。既可以               在表上定义instead of触发器,也可以在视图上定义。

INSERT、UPDATE 或 DELETE 语句修改指定表或视图中的数据时,可以使用 DML 触发器。 DML 触发器在 INSERT、 UPDATE 和 DELETE 语句上操作,并且有助于在表或视图中修改数据时强制业务规则,扩展数据完整性。

2)DLL 触发器是在响应数据定义语言事件时执行的存储过程。DDL 触发器激发存储过程以响应各种 DDL 语句,这些语句主要以CREATE、ALTER 和 DROP 开头。 DDL 触发器可用于管理任务,例如审核和控制数据库操作。

           DDL 触发器将激发存储过程以响应事件。但与 DML 触发器不同的是,它们不会为响应针对表或视图的 UPDATE、INSERT 或 DELETE 语句而激发。相反,它们将为了响应各种数据定义语言 (DDL) 事件而激发。这些事件主要与以关键字 CREATE、ALTER 和 DROP 开头的 Transact-SQL 语句对应。执行 DDL 式操作的系统存储过程也可以激发 DDL 触发器。        

DDL 触发器使用场合:

  • 要防止对数据库架构进行某些更改。
  • 希望数据库中发生某种情况以响应数据库架构中的更改。
  • 要记录数据库架构中的更改或事件。

参考:https://www.cnblogs.com/yank/p/4193820.html

创建触发器:

CREATE TRIGGER trigger_name 
ON {table_name | view_name} 
{FOR | After | Instead of } [ insert, update,delete ]
AS           
    sql_statement  

猜你喜欢

转载自blog.csdn.net/weixin_38108266/article/details/81841465
今日推荐