sql 触发器作用
发布网友
发布时间:2024-10-10 10:32
我来回答
共1个回答
热心网友
时间:2024-10-15 20:45
SQL触发器用于确保在数据库操作时遵循复杂的企业规则。例如,它们可以基于客户当前账户状态*新订单的插入。触发器还用于维持引用完整性,确保多个表间定义的关系在添加、更新或删除行时保持一致。不过,最佳实践是通过定义主键和外键约束在相关表中实现引用完整性。在数据库关系图中建立表间关系可自动创建外键约束。
触发器使用语句如下:DELIMITER | CREATE TRIGGER ``.`` [BEFORE | AFTER] [INSERT | UPDATE | DELETE] ON `` FOR EACH ROW BEGIN --执行特定操作 END |
通过相关表,触发器可以实现级联更改。然而,级联引用完整性约束通常更有效。触发器允许执行比CHECK约束更复杂的约束,并可以引用其他表中的列。例如,触发器可使用另一个表中的SELECT比较插入或更新的数据,并执行修改数据或显示自定义错误信息等操作。触发器还能评估数据修改前后的表状态,并根据差异采取相应措施。
约束和触发器在特定情况下各有优势。触发器的显著优点在于其包含的复杂Transact-SQL代码逻辑。然而,在功能需求允许的情况下,实体完整性通常应通过索引强制,这些索引是PRIMARY KEY或UNIQUE约束的一部分。域完整性应通过CHECK约束实现,而引用完整性应通过FOREIGN KEY约束强制。当约束功能无法满足应用程序需求时,触发器变得非常有用。
例如,FOREIGN KEY约束只能验证与另一列完全匹配的值,而CHECK约束仅能根据逻辑表达式或同一表中的另一列验证列值。如果应用程序需要根据其他表中的列验证列值,则必须使用触发器。约束只能通过标准系统错误信息传递错误信息,如果应用程序需要自定义信息或复杂错误处理,则必须使用触发器。
触发器可以实现级联更改,并且在违反引用完整性时阻止或回滚更改,取消尝试的数据修改。例如,当更改外键且新值与主键不匹配时,触发器会回滚插入。通常使用FOREIGN KEY来实现这一目的。如果触发器表上存在约束,则在INSTEAD OF触发器执行后但在AFTER触发器执行前检查这些约束。如果约束被破坏,则回滚INSTEAD OF触发器操作且不执行AFTER触发器。
关于在视图上创建触发器,SQL Server联机丛书中未明确禁止。语法解释表明在CREATE TRIGGER的ON之后可以是视图。然而,实践中许多专家表示触发器不能在视图上创建。经过测试,无论是否为普通视图或索引视图,都无法在上面创建触发器。尽管在临时表或系统表上创建触发器会遭到拒绝,但目前无法确定在视图上创建触发器的可行性。