手机有些网站打不开怎么解决,长春工程建设信息网站,erp系统教程,青海省建设工程信息网站5.4触发器 触发器是一种特殊类型的存储过程#xff0c;当表中的数据发生更新时将自动调用#xff0c;以响应INSERT、 UPDATE 或DELETE 语句。
5.4.1什么是触发器
1.触发器的概念 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程#xff0c;触发器通常用于强…5.4触发器 触发器是一种特殊类型的存储过程当表中的数据发生更新时将自动调用以响应INSERT、 UPDATE 或DELETE 语句。
5.4.1什么是触发器
1.触发器的概念 触发器是在对表进行插入、更新或删除操作时自动执行的存储过程触发器通常用于强制业务 规则是一种高级约束可以定义比用CHECK约束更为复杂的约束可执行复杂的SOL语句如 F/WHLE/CASE).可引用其他表中的列。触发器主要是通过事件进行触发而被执行的而存储过程 可以通过存储过程名称而被直接调用。当对某一表进行修改如UPDATEINSERTDELETE这些操作 时SQL Server 会自动执行触发器所定义的SaL语句从而确保对数据的处理必须符合由这些SaL 语句所定义的规则。由此触发器可分为以下几种。 INSERT触发器当向表中插入数据时触发自动执行触发器所定义的SOL语句。 UPDATE触发器当更新表中某列、多列时触发自动执行触发器所定义的SQL语句。 DELETE 触发器当删除表中记录时触发自动执行触发器所定义的SQL语句。
2. deleted 表和 inserted 表 每个触发器有两个特殊的表删除表deleted表和插入表inserted表。这两个表是逻辑表并 且这两个表是由系统管理的存储在内存中不是存储在数据库中因此不允许用户直接对其进行修改。 这两个表的结构与被该触发器作用的表有相同的表结构。这两个表是动态驻留在内存中的当 触发器工作完成它们也被删除这两个表主要保存因用户操作而被影响的原数据值或新数据值。 另外这两个表是只读的即用户不能向其写入内容但可以引用表中的数据。例如可用语句查 看deleted表中的信息SELECT * FROM deleted。 deleted 表用于存储DELETE和UPDATE语句所影响的行的副本即在deleted 表中临时保存被 删除或被更新前的记录行。在执行DELETE或UPDATE语句时行从触发器表中删除并传输到deleted 表中。由此我们可以从deleted表中检查删除的数据行是否能删除。如果不能就可以回滚撤销此操 作因为触发器本身就是一个特殊的事务单元。 inserted 表用于存储INSERT和UPDATE语句所影响的行的副本即在inserted 表中临时保存被 插入或被更新后的记录行。在执行INSERT或UPDATE语句时.新加行被同时添加到inserted表和触发 器表中由此我们可以从inserted表中检查插入的数据是否满足业务需求如果不满足就可以向用 户报告错误消息并回滚撤销操作。 更新语句类似于在删除之后执行插入首先旧行被复制到deleted 表中然后新行被复制到触 发器表和inserted表中。 综上所述inserted表和deleted表用于临时存放对表中数据行的修改信息它们在具体的增加. 删除、更新操作时的情况如表5-2所示。 3.触发器的作用 触发器的主要作用是实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性除 此之外触发器还有其他许多功能下面简单介绍这些功能。
1强化约束 触发器能够实现比CHECK语句更为复杂的约束。 约束和触发器在特殊情况下各有优势。触发器的主要优势在于它可以包含使用T-SOL代码的复 杂处理逻辑。因此触发器可以支持约束的所有功能。 在约束所支持的功能无法满足应用程序的功能要求时触发器极为有用。例如 除非REFERENCES子句定义了级联引用操作否则FOREIGN KEY约束只能以与另一列中的值 完全匹配的值来验证列值。 CHECK约束只能根据逻辑表达式或同一表中的另一列来验证列值如果应用程序要求根据 另一个表中的列验证列值则必须使用触发器。 约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用或能从中获益 自定义信息和较为复杂的错误处理则必须使用触发器。
2跟踪变化 触发器可以侦测数据库内的操作从而不允许数据库中未经许可的更新和变化。
3级联运行 触发器可以侦测数据库内的操作并自动地级联影响整个数据库的各项内容。例如某个表上 的触发器中包含对另外一个表的数据操作如删除、更新、插入而该操作又导致该表上触发器被 触发。触发器可通过数据库中的相关表实现级联更改不过通过级联引用完整性约束可以更有效 地执行这些更。 触发器可以禁止或回滚违反引用完整性的更改从而取消所尝试的数据修改。当更改外键 且新值与主键不匹配时此类触发器就可能发生作用。例如可以在成绩表上创建一个插 入触发器使它在新值与学员表中的某个值不匹配时回滚一个插入不过通常使用FOREIGN KEY来达到这个目的。 如果触发器表上存在约束则在执行INSERT.UPDATE及DELETE触发器前检查这些约束。 如果不满足约束则不执行INSERT.UPDATE及DELETE触发器。
注INSERT、UPDATE、DELETE触发器在数据行已修改完成后对 修改的数据行进行必要的善后处理。若发现有错误则用事务回滚 ROLLBACKTRANSACTION撤销本次操作,所以INSERT、UPDATE、 DELETE触发器在约束检查之后才执行。 实验环境实验案例三
xueyuan 表 需求描述
创建一个UPDATE触发器以确保xueyuan表中的数据不会被更改。
create trigger reminder
on xueyuan
for update
as
print 禁止修改,如需修改请联系DBA
rollback transaction
go 更改失败