触发器的基本概念8.2.1触发器与普通存储过程的区别:触发器的执行是由事件触发的,而普通存储过程是由命令调用执行的。■使用触发器有助于强制保持数据库的数据完整性例如,在触发器中可以完成如下功能:>不允许删除或更新特定的记录>不允许插入不符合逻辑关系的记录>在删除一条记录的同时删除其他表中与其相关的记录。>在修改十一条记录的同时修改其他表中与其相关的记录。16
16 8.2.1 触发器的基本概念 ◼ 触发器与普通存储过程的区别:触发器的执行是 由事件触发的,而普通存储过程是由命令调用执 行的。 ◼ 使用触发器有助于强制保持数据库的数据完整性。 例如,在触发器中可以完成如下功能: ➢不允许删除或更新特定的记录。 ➢不允许插入不符合逻辑关系的记录。 ➢在删除一条记录的同时删除其他表中与其相关 的记录。 ➢在修改一条记录的同时修改其他表中与其相关 的记录
SOLServer2012提供了两种触发器■INSTEADOF触发器:INSTEADOF触发器在指定的操作(INSERT、UPDATE或DELETE语句)之前被执行,它的功能是不执行指定的操作,而是执行INSTEADOF触发器中定义的操作。可以在表和视图上定义INSTEADOF触发器AFTER触发器。在执行了INSERT、UPDATE或DELETE语句操作之后执行AFTER触发器AFTER触发器只能在表正指定。17
17 SQL Server 2012提供了两种触发器 ◼ INSTEAD OF触发器:INSTEAD OF触发器在指 定的操作(INSERT、UPDATE或DELETE语句) 之前被执行,它的功能是不执行指定的操作,而 是执行INSTEAD OF触发器中定义的操作。可以 在表和视图上定义INSTEAD OF触发器。 ◼ AFTER触发器。在执行了INSERT、UPDATE或 DELETE语句操作之后执行AFTER触发器。 AFTER触发器只能在表上指定
触发器的主要优点触发器是自动执行的,不需要管理员手动维护数据库的数据完整性。触发器可以对数据库中的相关表进行级联更改。例如,可以在表“院系”中定义触发器,当用户删除表“院系”中的记录时,触发器将删除表“学生”中对应院系的记录。触发器可以限制向表中插入无效的数据,这一点与CHECK约束的功能相似。但在CHECK约束中不能使用到其他表中的字段,而在触发器中则没有此限制。例如,可以在表“学生”中定义触发器,限制插入的记录其“院系编号”字段值必须在表“院系”中存在对应的记录。18
18 触发器的主要优点 ◼ 触发器是自动执行的,不需要管理员手动维护数 据库的数据完整性。 ◼ 触发器可以对数据库中的相关表进行级联更改。 例如,可以在表“院系”中定义触发器,当用户 删除表“院系”中的记录时,触发器将删除表 “学生”中对应院系的记录。 ◼ 触发器可以限制向表中插入无效的数据,这一点 与CHECK约束的功能相似。但在CHECK约束中 不能使用到其他表中的字段,而在触发器中则没 有此限制。例如,可以在表“学生”中定义触发 器,限制插入的记录其“院系编号”字段值必须 在表“院系”中存在对应的记录
8.2.2inserted和deleted表deleted表用于存储DELETE和UPDATE语句所影响的行的复本。在执行DELETE或UPDATE语句时,行从触发器表中删除,并传输到deleted表中。deleted表和触发器表通常没有柜同的行。linserted表用于存储INSERT和UPDATE语句所影响的行的副本。在一个插入或更新事务处理中,新建行被同时添加到inserted表和触发器表中。inserted表中的行是触发器表中新行的副本19
19 8.2.2 inserted和deleted表 ◼ deleted表用于存储DELETE和UPDATE语句所 影响的行的复本。在执行DELETE或UPDATE 语句时,行从触发器表中删除,并传输到 deleted表中。deleted表和触发器表通常没有相 同的行。 ◼ inserted表用于存储INSERT和UPDATE语句所 影响的行的副本。在一个插入或更新事务处理 中,新建行被同时添加到inserted表和触发器表 中。inserted表中的行是触发器表中新行的副本
inserted和deleted表的变化一在设置触发器条件时,应当为引发触发器的操作恰当使用inserted和deleted表。通常在插入数据时,可以从insert表中读取新插入的值,此时delete表不会发生变化■在删除数据时,可以从delete表中读取已经删除或修改的值,而insert表不会发生变化。在更新数据时,insert表和delete表都发生变化可以从delete表中读取原有的值,从insert表中读取修改后的值。20
20 inserted和deleted表的变化 ◼ 在设置触发器条件时,应当为引发触发器的操 作恰当使用inserted和deleted表。 ◼ 通常在插入数据时,可以从insert表中读取新插 入的值,此时delete表不会发生变化。 ◼ 在删除数据时,可以从delete表中读取已经删除 或修改的值,而insert表不会发生变化。 ◼ 在更新数据时,insert表和delete表都发生变化。 可以从delete表中读取原有的值,从insert表中 读取修改后的值