zoukankan      html  css  js  c++  java
  • 触发器讲解

    触发器是一种特殊的存储过程,类似于其它编程语言中的事件函数,SQL Server 允许为 INSERT、UPDATE、DELETE 创建触发器,当在表(视图)中插入、更新、删除记录时,触发一个或一系列 T-SQL 语句。

    本专题的目的并非是向您详尽地介绍触发器,而是系统地向您介绍触发器的常用知识与相关应用,并与您一起探讨应用经验,如果您需要了解触发器不常用的知识点,请参见 SQL Server 联机丛书(安装 SQL Server 时默认是安装的)。

    触发器到底可不可以在视图上创建

    在 SQL Server 联机丛书中,是没有说触发器不能在视图上创建的, 并且在语法解释中表明:在 CREATE TRIGGER 的 ON 之后可以是视图。 然而,事实似乎并不是如此,很多专家也说触发器不能在视图上创建。 我也专门作了测试,的确如此,不管是普通视图还是索引视图,都无法在上面创建触发器,真的是这样吗?请点击详细, 但是无可厚非的是:当在临时表或系统表上创建触发器时会遭到拒绝。

    深刻理解 FOR

    CREATE TRIGGER 语句的 FOR 关键字之后可以跟 INSERT、UPDATE、DELETE 中的一个或多个,也就是说在其它情况下是不会触发触发器的, 包括 SELECT、TRUNCATE、WRITETEXT、UPDATETEXT。相关内容

    一个有趣的应用

    我们看到许多注册系统在注册后都不能更改用户名,但这多半是由应用程序决定的, 如果直接打开数据库表进行更改,同样可以更改其用户名, 在触发器中利用回滚就可以巧妙地实现无法更改用户名……详细内容

    触发器内部语句出错时……

    这种情况下,前面对数据更改操作将会无效。 举个例子,在表中插入数据时触发触发器,而触发器内部此时发生了运行时错误,那么将返回一个错误值,并且拒绝刚才的数据插入。

    启用或禁用触发器

    通过在查询分析器中执行 alter table 可以启用或禁用表的一个或所有触发器。详细内容

    不能在触发器中使用的语句

    触发器中可以使用大多数 T-SQL 语句,但如下一些语句是不能在触发器中使用的。

    • CREATE 语句,如:CREATE DATABASE、CREATE TABLE、CREATE INDEX 等。
    • ALTER 语句,如:ALTER DATABASE、ALTER TABLE、ALTER INDEX 等。
    • DROP 语句,如:DROP DATABASE、DROP TABLE、DROP INDEX 等。
    • DISK 语句,如:DISK INIT、DISK RESIZE。
    • LOAD 语句,如:LOAD DATABASE、LOAD LOG。
    • RESTORE 语句,如:RESTORE DATABASE、RESTORE LOG。
    • RECONFIGURE
    • 说明:有人说不能用 TRUNCATE TABLE 语句,其实是可以的。
    慎用触发器

    触发器功能强大,轻松可靠地实现许多复杂的功能,为什么又要慎用呢。 触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。 在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。 如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程序……详细内容

    文章来自http://www.cftea.com/specials/trigger/

  • 相关阅读:
    PAT:1075. PAT Judge (25) AC
    PAT:1010. 一元多项式求导 (25) AC
    PAT:1076. Forwards on Weibo (30) AC
    PAT:1086. Tree Traversals Again (25) AC
    PAT:1020. Tree Traversals (25) AC
    PAT:1051. Pop Sequence (25) AC
    PAT:1063. Set Similarity (25) AC
    PAT:1017. A除以B (20) AC
    C语言指针
    iOS block
  • 原文地址:https://www.cnblogs.com/ccsbb/p/1729948.html
Copyright © 2011-2022 走看看