DBMS触发器(trigger)

workbench 触发器和索引怎么配注:

  • T-SQL是Transact-SQL的缩写,是一种用于管理和查询关系数据库的编程语言。它是Microsoft SQL Server数据库管理系统中使用的一种SQL方言。T-SQL不仅支持标准的SQL语法,还提供了额外的功能和扩展,使其更适合处理复杂的数据库操作和编写存储过程、触发器和函数等数据库对象。
  • 视图(View)是一种虚拟的数据库对象,它代表一个基本表或其他视图的查询结果集。视图是一种抽象层,允许用户以更简单的方式访问和查询数据库中的数据,而不必直接操作表。

触发器

  • 基本概念:触发器(Trigger)是用户定义在关系表上的一类由事件驱动的特殊存储过程。

    触发器(英语:trigger)是在数据库中,在执行对资料有异动的动作时,先行拦截并处理的一种数据库物件,它大部分会设在资料表中,作为强制执行特定动作的程序,因此又称为数据操纵语言(DML)触发器。——Wikipedia

  • 触发器不能通过名称被用户直接调用,不允许带参数

AFTER触发器、INSTEAD OF触发器

  • (除了这两种主要的触发器类型,不同的数据库管理系统可能还支持其他特定类型的触发器。例如:PostgreSQL 还支持 “BEFORE” 触发器。)

AFTER触发器

  1. AFTER触发器又称”后触发器”,该类触发器是在引起触发器执行的修改语句 (INSERT 、 UPDATE 或 DELETE) 成功完成之后执行的。如果中途失败,触发器不会执行。

  2. 此类触发器只能定义在表上,不能创建在视图(view)上。

INSTEAD OF触发器

  1. INSTEAD OF触发器又称为替代触发器,该类触发器是当引起的修改语句停止时执行的。

  2. 既能在表上定义,也可在视图上定义。

  3. 对于每个触发操作(INSERT 、 UPDATE 或 DELETE)只能定义一个INSTEAD OF触发器。

  • 用途:可用于对一个或多个列执行错误或值检查,然后在INSERT、UPDATE或DELETE之前执行其他操作。

触发器技术是一种用于确保数据完整性和实现复杂业务规则的高级技术。相对于其他约束,触发器具有以下优点:

  1. 自动执行(Automated Execution):只要对表的数据进行修改,触发器会立即激活。

  2. 级联更改(Cascading Changes):触发器能够实现数据库中相关表的级联更改。(例如,在销售数据库中,可以为商品表的商品编号字段创建一个插入触发器,当向商品表添加新记录时,触发器会自动在商品销售表的商品编号中插入新的商品编号值。)

  3. 数据完整性(Data Integrity):触发器可用于实施数据完整性约束,确保数据在数据库中保持一致性和有效性。这包括检查外键关系、唯一性约束、检查约束等。(触发器能够实现比CHECK约束更为复杂的数据完整性约束。触发器可以包含复杂的处理逻辑,允许实现复杂的数据完整性约束。与CHECK约束不同,触发器可以引用其他表中的列,并执行其他操作,如修改数据或显示自定义信息。)

  4. 应用程序逻辑(Application Logic):触发器可用于执行应用程序特定的业务逻辑。在一个表中可以存在多个不同类型的触发器(INSERT、UPDATE或DELETE),这意味着对于相同的修改语句,可以有多个不同的响应策略。这提供了更大的灵活性。

  5. 审计和日志(Auditing and Logging):记录数据库操作历史,以帮助跟踪和回溯操作。

创建触发器

  • 一个触发器由三部分组成:触发事件、触发条件、触发器动作体。
  • 表的所有者具有创建触发器的默认权限,不能将该权限转授给其他用户。
格式一般如下:
CREATE TRIGGER <触发器名> ON <表名|视图名>
    { FOR | AFTER | INSTEAD OF} <触发事件>
AS
    <触发器动作体>
……
  1. <触发器名> 不能以”#”或”##”开头。

  2. <表名/视图名> 当这个表的数据发生变化时,将激活定义在该表上相应触发事件的触发器。视图只能被INSTEAD OF触发器引用。

  3. AFTER 选项。用于SQL语句中指定操作都已成功执行时才被触发。所有级联操作约束检查也必须在它之前完成。

    • 如果仅指定FOR关键字,则AFTER为默认值。
  4. INSTEAD OF 选项。用于在原始SQL语句前指定操作(一个更高优先级的。)

    • 不可用于 使用WITH CHECK OPTION 的可更新视图。
  5. 触发事件可以是INSERT|UPDATE|DELETE,也可以是它们的组合。定义触发器时必须至少指定一个触发事件。

  6. <触发器动作体> 可以是一组T-SQL语句,也可以是对已创建存储过程的调用。

SQL Server触发器中delete表和inserted表

  1. delete表存储着被DELETE和UPDATE语句影响的数据行。在删除和更新过程中,指定的数据行从基本表中删除,转移到delete表。所以一般来说基本表中和delete表中不会存在相同数据行。*(delete表作回收站)*

  2. inserted表中存储着被INSERT和UPDATE语句影响的的数据行。在插入和更新过程中,新的数据行添加到基本表,数据行的副本被复制到inserted临时表。

  • 2个表都存在于高速缓存中。

  • 由SQL Server自动创建管理,不允许用户修改。

  • 一个典型的更新(UPDATE)事务由2个操作组成。1.旧数据行从基本表转移到delete表;2.新的数据行同时插入基本表和inserted表。即先删除再插入

启用和禁用触发器

  • 不同类型数据库的SQL语句也不同,这里以SQL Server举例。
    ALTER TABLE <表名>
    { ENABLE | DISABLE } TRIGGER { ALL | <触发器名> [,…n] }

修改和删除触发器

修改触发器的定义,可以使用ALTER TRIGGER语句。ALTER TRIGGER语句与CREATE TRIGGER语句的语法相似,只是语句的第一个关键字不同。
######
ALTER TRIGGER <触发器名> ON <表名|视图名>
{ FOR | AFTER | INSTEAD OF } <触发事件>
AS
<触发器动作体>

当不再需要触发器时,可以将其删除。只有触发器的所有者才有权删除触发器。删除一个或多个触发器,可以使用DROP TRIGGER 语句,语法如下。
######
DROP TRIGGER <触发器名> [,…n]
当某个表被删除后,该表上的所有触发器将同时被删除,但是删除触发器不会对表中数据有影响

Donate
  • Copyright: Copyright is owned by the author. For commercial reprints, please contact the author for authorization. For non-commercial reprints, please indicate the source.

扫一扫,分享到微信

微信分享二维码
  • Copyrights © 2015-2024 buynonsense
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信