sql触发器 订阅
行业务规则Microsoft SQL Server™ 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的Transact-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。 展开全文
行业务规则Microsoft SQL Server™ 2000 提供了两种主要机制来强制业务规则和数据完整性:约束和触发器。触发器是一种特殊类型的存储过程,它在指定的表中的数据发生变化时自动生效。唤醒调用触发器以响应 INSERT、UPDATE 或 DELETE 语句。触发器可以查询其它表,并可以包含复杂的Transact-SQL语句。将触发器和触发它的语句作为可在触发器内回滚的单个事务对待。如果检测到严重错误(例如,磁盘空间不足),则整个事务即自动回滚。
信息
作    用
存储
运用类型
SQL
中文名
SQL触发器
外文名
SQL trigger
SQL触发器优点
触发器可通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以更有效地执行这些更改。触发器可以强制用比 CHECK 约束定义的约束更为复杂的约束。与 CHECK 约束不同,触发器可以引用其它表中的列。例如,触发器可以使用另一个表中的 SELECT 比较插入或更新的数据,以及执行其它操作,如修改数据或显示用户定义错误信息。触发器也可以评估数据修改前后的表状态,并根据其差异采取对策。比较触发器与约束约束和触发器在特殊情况下各有优势。触发器的主要好处在于它们可以包含使用 Transact-SQL 代码的复杂处理逻辑。因此,触发器可以支持约束的所有功能;但它在所给出的功能上并不总是最好的方法。实体完整性总应在最低级别上通过索引进行强制,这些索引或是 PRIMARY KEY 和 UNIQUE 约束的一部分,或是在约束之外独立创建的。假设功能可以满足应用程序的功能需求,域完整性应通过 CHECK 约束进行强制,而引用完整性 (RI) 则应通过 FOREIGN KEY 约束进行强制。在约束所支持的功能无法满足应用程序的功能要求时,触发器就极为有用。例如:除非 REFERENCES 子句定义了级联引用操作,否则 FOREIGN KEY 约束只能以与另一列中的值完全匹配的值来验证列值。CHECK 约束只能根据逻辑表达式或同一表中的另一列来验证列值。如果应用程序要求根据另一个表中的列验证列值,则必须使用触发器。约束只能通过标准的系统错误信息传递错误信息。如果应用程序要求使用(或能从中获益)自定义信息和较为复杂的错误处理,则必须使用触发器。触发器可通过数据库中的相关表实现级联更改;不过,通过级联引用完整性约束可以更有效地执行这些更改。触发器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外键且新值与主键不匹配时,此类触发器就可能发生作用。例如,可以在 titleauthor.title_id 上创建一个插入触发器,使它在新值与 titles.title_id 中的某个值不匹配时回滚一个插入。不过,通常使用 FOREIGN KEY 来达到这个目的。如果触发器表上存在约束,则在 INSTEAD OF触发器执行后但在 AFTER触发器执行前检查这些约束。如果约束破坏,则回滚INSTEAD OF触发器操作并且不执行 AFTER触发器。
收起全文
精华内容
下载资源
问答
  • SQL触发器

    2020-05-20 17:22:07
    SQL 什么是触发器 触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。 例如:分别在数据库创建2个表,一个是...

    SQL 什么是触发器

    触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

    例如:分别在数据库创建2个表,一个是Booktypes表,用来记书本类型,一个是Books表,用来记书本数,并建立主键,关系。分别在表里插入数据,如下图所示
    在这里插入图片描述 name为书本类型
    num为数量
    ID自增

    在这里插入图片描述name为书名
    remark为备注
    TypeID是关联表Booktypes的关系
    ID自增

    当我把Books里的 《水浒》 这本书删除的时候 与之对应的文学类书本类型表Booktypes的数量减一

    下面创建触发器

    create trigger(关键字) tri_del(触发器的名称)
    on Books(表名) for delete(要执行的操作)
    as
    declare @typeid int(定义一个数来接收Books表里的TypeID )
    select @typeid=TypeID from deleted
    update BookTypes set nums=Nums-1 where id=@typeid

    在这里插入图片描述
    从表中可以看出 Books表里的《水浒》被删除了
    再次查询2张表 会发现 BookTypes 表里的nums减了1
    在这里插入图片描述

    总结

    当数据库使用语言对数据库表结构进增删改时,触发器就会被触发。但其目的主要是为了执行对数据库的管理操作。
    ————————————————

    展开全文
  • SQL触发器的实例,初学SQl触发器很有用 SQL触发器的实例,初学SQl触发器很有用
  • SQL 触发器

    千次阅读 热门讨论 2015-06-24 20:38:26
    SQLServer 中的触发器是一种特殊的存储过程,而存储过程可以说是对数据库定义的一些“操作”,几天学习到了触发器,于是拿起了原来的数据库系统原理,看看触发器到底是个什么东西!  一、触发器的形成原因:  1...

        SQLServer 中的触发器是一种特殊的存储过程,而存储过程可以说是对数据库定义的一些“操作”,几天学习到了触发器,于是拿起了原来的数据库系统原理,看看触发器到底是个什么东西!

        一、触发器的形成原因:

        1、完成预定义的一系列操作。对数据库进行某个操作后,系统能自动的根据条件转去执行各种操作,甚至执行与原操作无关的操作,那么,这个设想,可以用触发器来实现。我的理解是,从一方面来讲,触发器就是我们自己定义的一组SQL语句,用来对数据库进行操作。

        2、为了实现数据库的完整性,其中包括一些约束条件,像什么基本表约束啦等等。其目的就是保证数据的正确性(数据是否合法),有效性(数据是否属于定义的范围)、相容性(防止错误数据进入数据库)。

        二、 触发器的结构:

        1、事件:对数据进行的Insert 、Delete、Update 等操作

        2、条件:测试触发器成立的条件。

        3、动作:对数据库的一些操作。

        触发器的结构中还有动作时间即 AFTER 和 INSTEAD OF,AFTER表示在触发时间完成之后执行触发器的动作体部分,INSTEAD OF表示在触发时间发生时执行触发器的动作体部分。

        触发器的执行过程 如果一个Insert﹑update或者delete语句违反了约束﹐那幺After触发器不会执行﹐因为对约束的检查是在After触发器被激动之前发生的。所以After触发器不能超越约束。Instead of 触发器可以取代激发它的操作来执行。它在Inserted表和Deleted表刚刚建立﹐其它任何操作还没有发生时被执行。因为Instead of 触发器在约束之前执行﹐所以它可以对约束进行一些预处理。

        三、触发器中的表

        触发器有两个特殊的表,插入表(instered表)和删除表(deleted表)。这两张是逻辑表也是虚表。是系统在内存中创建者两张表,不会存储在数据库中。而且两张表的都是只读的,只能读取数据而不能修改数据。这两张表的结果总是与被改触发器应用的表的结构相同。当触发器完成工作后,这两张表就会被删除。Inserted表的数据是插入或是修改后的数据,而deleted表的数据是更新前的或是删除的数据。


        四、触发器的一些操作

        1、创建

    CREATE TRIGGER tgr_name --触发器的名字 
       ON  news --将要操作的表的名字 
       AFTER DELETE  -- 动作体在完成news表的删除操作之后执行
     AS 
    BEGIN
        declare @caId int
    	select @caId =id from deleted
    	--删除评论
    	delete comment where newsId in (select newsId from news where caId =@caId)
    	--删除新闻
    	delete news where caId =@caId
    	--删除类别
    	delete category where id=@caId
    
    END
    GO
    

       2、删除

     drop trigger trigger_name  
      五、小结

      以前学习过耿建玲老师的SQLServer视频,但是当时幼稚的我没有理解里面的奥秘,这才知道学习是一个反复的过程,这是后在看触发器,有了不一样的感觉,其实,触发器的应用还很多,我只是将自己理解的写了上来,欢迎广大读者丢转。

    展开全文
  • 触发器内容保存 到本机。刷新了 点击然而并不能展开 触发器内容保存 到本机。刷新了 点击然而并不能展开![图片说明](https://img-ask.csdn.net/upload/201607/15/1468561976_928390.png)
  • Sql 触发器

    千次阅读 2014-01-22 09:47:24
    触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。   触发器在数据库里以独立的对象存储,与存储...

            触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活。所以触发器可以用来实现对表实施复杂的完整性约束。 

            触发器在数据库里以独立的对象存储,与存储过程不同的是,存储过程通过其他程序来启动运行,而触发器是由一个事件来启动运行。即当某个事件发生时,触发器自动地隐式运行。并且,触发器不能接收参数。

            触发器对象定义了触发器的特征和被调用时采取的行动。而这些动作是通过一个或多个SQL语句来实现的。SQL支持3种类型的触发器:INSERT(插入)、UPDATE(更新)和DELETE(删除)。当向表中插入数据、更新数据或删除数据时,触发器就被调用。通过给表定义一个或多个触发器,可以指定哪个数据修改时,可以激发触发器。

    一、SQL Server

            SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。 触发器执行完成后﹐与该触发器相关的这两个表也被删除。 

            Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。 
            Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。


            在SQLServer中,可以采用CREATETRIGGER命令创建触发器。语法如下:

    CREATETRIGGERtrigger_nameON{table|view}[WITHENCRYPTION]{
    {{FOR|AFTER|INSTEADOF}{[DELETE][,][INSERT][,][UPDATE]}
    [NOTFORREPLICATION]
    AS
    [{IFUPDATE(column)
    [{AND|OR}UPDATE(column)]
    [...n]
    |IF(COLUMNS_UPDATED(){bitwise_operator}updated_bitmask)
    {comparison_operator}column_bitmask[...n]
    }]
    sql_statement[...n]}}

    • trigger_name:为用户要创建的触发器的名字,触发器的名字必须符合SQLServer的命名规则,且其名字在当前数据库中必须是惟一的。
    • Table、view:与触发器相关联的表或视图的名字,并且该表或视图必须已经在数据库中存在。
    • WITHENCRYPTION:表示对含有CREATETRIGGER文本的syscomments表进行加密,防止用户通过查询syscomments表获取触发器的代码。
    • AFTER:表示只有执行了指定的操作(INSERT、DELETE、或UPDATE)之后,触发器才被激活,执行触发器中的SQL语句。
    • FOR:表示为AFTER触发器,且该触发器仅能在表上创建。
    • INSTEADOF:指定触发器为INSTEADOF触发器
    • 小注:每个表最多只能有一个INSTEADOF(INSERT、UPDATE、DELETE)触发器。然而可以为每个表创建多个视图,对每个视图都可以有不同的INSTEADOF触发器。
    • DELETE、INSERT、UPDATE:指明执行哪种操作,将激活触发器。至少要包含3种操作类型种的一种,也可以是3种操作语句的任意组合。其中三者的顺序不受限制,且各选项要用逗号隔开。
    • NOTFORREPLICATION:告诉DBMS,当复制表时,触发器不能被执行。AS:后面列出触发器将要执行的动作。
    • IFUPDATEcolumn:用来测定对某一确定列是INSERT操作还是UPDATE操作。如果要测试INSERT还是UPDATE操作的列多于一列,可用AND或OR逻辑连接向IFUPDATE子句添加所希望的附加列名。
    • IFCOLUMNS_UPDATED():仅在INSERT和UPDATE类型的触发器中使用,检查列是被更新还是被插入。
    • bitwise_operator:代表位逻辑运算符,常用“&”。
    • updated_bitmask:表示列的整位掩码。其中最右边的位表示表或视图的第1列,左边第2位代表第2列,依此类推。
    • comparison_operator:表示比较操作符。可以是“=”或者“>”。“=”表示检查在updated_bitmask中定义的所有列是否都被更新,用“>”表示检查是否在updated_bitmask小注:
    • 为了便于理解,这里给出一个使用IFCOLUMNS_UPDATED()子句的例子。如果表T包括C1、C2、C3、C4、C5和C66列,为了检查C2、C4或者C6列是否更新过,可使用42(二进制表示为“101010”)作为掩码,表示为:IF(COLUMNS_UPDATED()&42)>0;如果检查C2、C4和C63列是否都被更新过,表示为:IF(COLUMNS_UPDATED()&42)=42
    • sql_statement:代表包含在触发器中的处理语句。

      当不再需要触发器时,可用DROPTRIGGER语句删除触发器。语法如下:

      DROP  TRIGGER  trigger_name[...n]

    二、Oracle

            在Oracle中共有3种类型的触发器:DML触发器、替代触发器和系统触发器。

            DML触发器:Oracle可以在DML语句(INSERT、UPDATE、DELETE)进行触发,可以在DML操作前或操作后进行触发,并且可以对每个行或语句上进行触发。替代触发器(INSTEADOF):与SQLServer中的INSTEADOF触发器类似,由于在Oracle里,不能直接对由两个以上的表建立的视图进行操作。所以给出了替代触发器。系统触发器:从Oracle8i开始,提供了第三种类型的触发器叫系统触发器。它可以在Oracle的事件中进行触发,如Oracle系统的启动与关闭等。

            在Oracle中,触发器的创建也是通过CREATETRIGGER语句来实现的,但与SQLServer中的触发器创建语法有较大的差别。语法如下:

    CREATE  TRIGGER  trigger_name
    [BEFORE|AFTER]
    trigger_event
    ON  table_reference
    [FOREACHROW[WHENtrigger_condition]]trigger_body
            说明如下:

    • rigger_name:为触发器的名字。在Oracle中,触发器名与存储过程名字不一样,它是单独的名字空间,因而触发器名可以和表或存储过程有相同的名字。
    • BEFORE|AFTER:指明了触发器是在数据修改前(BEFORE),还是修改后(AFTER)被调用。
    • trigger_event:为触发器事件,可以是INSERT、UPDATE或DELETE。如果要创建替代触发器,则只需在触发事件前加上关键词INSTEADOF即可。
    • ON:子句则包含了目标表的名称,也就是触发器应用的表。
    • FOREACHROW:指明每次插入、更新或删除一行时就调用触发器。
    • WHEN:是可选的,可以定义搜索条件,来限制调用触发器时的搜索范围。
    • trigger_body:为触发器执行的SQL语句,这些语句必须被放在BEGIN……END块中。
    • 另外,在Oracle中,触发器的应用受到一定的限制,主要的限制条件有以下几个。触发器中可以包括DML语句,但不能使用控制语句、COMMIT语句、ROLLBACK语句、SVAEPOINT语句。然而,对于“系统触发器”,则可以使用CREATE语句、ALTER语句或者DROP语句。由触发器所调用的存储过程或函数也不能使用控制语句。触发器中不能使用LONG、LONGRAW数据类型。

    本文来自百度文库:点击打开链接



    展开全文
  • sql 触发器

    2018-05-03 17:42:21
    然后触发器执行更新另一个表所有包含这些id的,但是总提示 在将 varchar 值 '38,37,36,35,34,33,32,31,30,29' 转换成数据类型 smallint 时失败 declare @fid varchar(50) /** 劳模id **/ select @fid=tpjl_tpjl...
  • 什么是SQL触发器SQL触发器是什么意思? 在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表...
    什么是SQL触发器?SQL触发器是什么意思?

    在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用。当对某一表进行诸如UPDATE、 INSERT、 DELETE 这些操作时,SQL Server 就会自动执行触发器所定义的SQL 语句,从而确保对数据的处理必须符合由这些SQL 语句所定义的规则。

    触发器的主要作用就是其能够实现由主键和外键所不能保证的复杂的参照完整性和数据的一致性。除此之外,触发器还有其它许多不同的功能:

    (1)强化约束(Enforce restriction)

    触发器能够实现比CHECK 语句更为复杂的约束。

    (2)跟踪变化(Auditing changes)

    触发器可以侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。

    (3)级联运行(Cascaded operation)。

    触发器可以侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。例如,某个表上的触发器中包含有对另外一个表的数据操作(如删除,更新,插入)而该操作又导致该表上触发器被触发。

    (4)存储过程的调用(Stored procedure invocation)。

    为了响应数据库更新触,发器可以调用一个或多个存储过程,甚至可以通过外部过程的调用而在DBMS( 数据库管理系统)本身之外进行操作。
    由此可见,触发器可以解决高级形式的业务规则或复杂行为限制以及实现定制记录等一些方面的问题。例如,触发器能够找出某一表在数据修改前后状态发生的差异,并根据这种差异执行一定的处理。此外一个表的同一类型(INSERT、 UPDATE、 DELETE)的多个触发器能够对同一种数据操作采取多种不同的处理。

    总体而言,触发器性能通常比较低。当运行触发器时,系统处理的大部分时间花费在参照其它表的这一处理上,因为这些表既不在内存中也不在数据库设备上,而删除表和插入表总是位于内存中。可见触发器所参照的其它表的位置决定了操作要花费的时间长短。

    触发器的种类

    SQL Server 2000 支持两种类型的触发器:AFTER 触发器和INSTEAD OF 触发器。其中AFTER 触发器即为SQL Server 2000 版本以前所介绍的触发器。该类型触发器要求只有执行某一操作(INSERT UPDATE DELETE) 之后,触发器才被触发,且只能在表上定义。可以为针对表的同一操作定义多个触发器。对于AFTER 触发器,可以定义哪一个触发器被最先触发,哪一个被最后触发,通常使用系统过程sp_settriggerorder 来完成此任务。

    INSTEAD OF 触发器表示并不执行其所定义的操作(INSERT、 UPDATE、 DELETE),而仅是执行触发器本身。既可在表上定义INSTEAD OF 触发器,也可以在视图上定义INSTEAD OF 触发器,但对同一操作只能定义一个INSTEAD OF触发器。
    展开全文
  • SQL触发器

    2010-07-17 09:21:00
    一、创建一个简单的触发器 触发器是一种特殊的存储过程,类似于事件函数,SQL Server™ 允许为 INSERT、UPDATE、DELETE 创建触发器,即当在表中插入、更新、删除记录时,触发一个或一系列 T-SQL语句。...
  • SQL存储过程习题,SQL触发器习题,SQL习题,基础语法,与W3School类似,初学者学习使用。
  • sql触发器

    千次阅读 2008-08-03 19:19:00
    触发器执行如果发生约束侵犯,则永远不会执行 AFTER 触发器,因此这些触发器不能用于任何可能防止约束侵犯的处理。执行 INSTEAD OF 触发器而不是通常的触发动作。在创建将更改反映到基表的 inserted 和 deleted 表...
  • SQL触发器的使用方法,SQL触发器的使用方法,SQL触发器的使用方法,SQL触发器的使用方法

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 136,766
精华内容 54,706
关键字:

sql触发器