码迷,mamicode.com
首页 > 数据库 > 详细

46. SQL -触发器之概述

时间:2015-04-09 12:07:00      阅读:267      评论:0      收藏:0      [点我收藏+]

标签:服务器   触发器   create   数据库   数据表   

 

器概念:

器是一种特殊型的存储过程,不由用直接用。建触行定,以便在特定表或列作特定型的数据修改时执行。

 

总结

  1. 器是与数据和数据表相合的特殊的存储过程,当数据表有InsertUpdateDelete操作或数据CreateAlterDrop 操作的候,可以激活触器,并运行其中T-SQL 句。

  2. SQLServer 2008 中触器分有DML 器和DDL 器两种。

    其中DML器又分After 器和Instead Of 器两种。

    After 器是先修改记录后激活的触器;

    Instead Of 器是取代器。

    DDL 器根据作用范可以分作用在数据的触器和作用在服器的触器两种。

    After 器只能用于数据表中,而Instead Of器即可以用在数据表中,也可以用在视图中。

  3. 使用CREATETRIGGER句可以建触器,使用ALTER TRIGGER句可以修改触器,使用Drop Trigger 句可以除触器。

  4. 器允嵌套递归,嵌套最多可以是32

 

 

其本是:

  1. 它不能被式地用,而是在往表中插入记录、更改记录或者记录时,当事件,才被自地激活。

  2. CREATE PROCEDURE 或 CREATE TRIGGER 句不能跨越批理。即存储过程或触器始只能在一个批理中建并编译到一个划中。

  3. 用触可以业务规则MicrosoftSQL Server 提供了两种主要机制来业务规则和数据完整性:束和触

  4. 器是一种特殊型的存储过程,它在指定的表中的数据生效。用触器以响INSERTUPDATE DELETE 句。

  5. 器可以查询其它表,并可以包含复Transact-SQL 句。将触器和触它的句作可在触器内回个事务对待。如果检测错误(例如,磁不足),整个事即自因此就具了事的所有特征。

 

注意: 什么特征在触器中的作用

如果发现引起触行的T-SQL 行了一个非法操作,比如关于其它表的相关性操作,发现数据失或需用的数据不存在,那么就回事件行前的SQL SERVER数据

 

A、触器的

1)器可通数据中的相关表实现级联更改;不,通过级联引用完整性束可以更有效地些更改。

2器可以制比用CHECK 束定束更束。CHECK 束不同,触器可以引用其它表中的列。例如,触器可以使用另一个表中的 SELECT 插入或更新的数据,以及行其它操作,如修改数据或示用

义错误信息。

3)器也可以估数据修改前后的表状,并根据其差异采取策。一个表中的多个同器(INSERTUPDATE DELETE)允采取多个不同的策以响同一个修改句。

 

B、触器与束的比:

  • 器的主要好在于它可以包含使用Transact-SQL的复杂处逻辑。因此,触器可以支持束的所有功能;

 

  • 束所支持的功能无法用程序的功能要求,触器就极有用。例如:除非 REFERENCES 子句定级联引用操作,否FOREIGN KEY 束只能以与另一列中的完全匹配的验证CHECK 束只能根据逻辑表达式或同一表中的另一列来验证。如果用程序要求根据另一个表中的列验证使用触器。

     

  • 束只能通过标准的系统错误信息传递错误信息。如果用程序要求使用(或能从益)自定信息和较为错误处理,使用触器。

 

  • 器可通数据中的相关表实现级联更改;不,通过级联引用完整性束可以更有效地些更改。器可以禁止或回滚违反引用完整性的更改,从而取消所尝试的数据修改。当更改外且新与主不匹配器就可能生作用。

     

    例如, 可以在titleauthor.title_id建一个插入触器,使它在新titles.title_id中的某个不匹配一个插入。不,通常使用FOREIGNKEY 来达到个目的。如果触器表上存在束,INSTEADOF 行后但在AFTER 行前检查这束。如果束破坏,INSTEAD OF 器操作并且不AFTER器。

 

C、触器功能

完成比束更复的数据束:器可以实现束更的数据

检查所做的SQL 是否允器可以检查SQL 所做的操作是否被允

如:在存表里,如果要除一条记录,在记录时,触器可以

检查该产存数量是否零,如果不取消该删除操作。

修改其它数据表里的数据:当一个SQL 数据表行操作的候,触可以根据SQL 句的操作情况来另一个数据表行操作。

例如:一个订单取消的候,那么触器可以自修改表,在订购量的字段上减去被取消订单订购数量。

用更多的存储过程:束的本身是不能用存储过程的,但是触器本身就

是一种存储过程,而存储过程是可以嵌套使用的,所以触器也可以用一个

或多储过程。

SQL MailSQL 行完之后,触器可以判断更改记录是否

达到一定条件,如果达到个条件的,触器可以自动调SQL Mail

件。

例如:当一个订单之后,可以物流人员发Email,通知他尽快发货

返回自定错误信息:束是不能返回信息的,而触器可以。例如插入一

条重复记录时,可以返回一个具体的友好的错误信息前台用程序。

更改原本要操作的SQL 句:器可以修改原本要操作的SQL 句,例如

原本的SQL 句是要除数据表里的记录,但数据表里的记录是最要记录

不允许删除的,那么触器可以不该语句。

防止数据表更改或数据表被除:了保建好的数据表,触器可

以在接收到Drop Alter SQL 句里,不数据表的操作。

 

器分

SQLServer 中,触器可以分两大DML 器和DDL

DML 器:

DML器是当数据器中生数据操作言(Data Manipulation

Language)事件时执行的存储过程。

DML 器又分After 器和Instead Of

1 After 器:这类器是在记录完之后(after),才会被激活行,它主要是用于记录变更后的理或检查,一旦发现错误,也可以用RollbackTransaction 句来回本次的操作。即AFTER 器在INSERTUPDATEDELETE 句的操作之后

2 InsteadOf 器:这类器一般是用来取代原本的操作,在记录变更之生的,它并不去行原来SQL 句里的操作(InsertUpdateDelete),

而去行触器本身所定的操作。INSTEADOF 器代替INSERT,UPDATE DELETE

 

DDL 器:

DDL器是在响数据定义语言(Data Definition Language)事件时执行的存

储过程。DDL 器一般用于行数据中管理任。如核和范数据操作、防止数据构被修改等。

 

3)、触器工作方式:

1 INSERT器的工作方式

1 INSERT

3 AFTER INSERT

2 记录INSERT

CREATETRIGGER [insrtWorkOrder] ON [Production].[WorkOrder]

AFTERINSERT AS

BEGIN

SETNOCOUNT ON

INSERTINTO [Production].[TransactionHistory]

([ProductID],

[ReferenceOrderID],

[TransactionType],

[TransactionDate],

[Quantity],

[ActualCost])

SELECT

inserted.[ProductID],inserted.[WorkOrderID],‘W‘,GETDATE(),inserted.[OrderQty],0

FROM inserted

 

2 DELETE器的工作方式

临时Inserted Deleted

q 器触发时

q 在内存中deleted 表或inserted

q ,不允修改;触行完成后,自动删

l 除的表(Deleted)用于存DELETE UPDATE句所影响的行的副本。在DELETE UPDATE 句的程中,行从触器表中除,并传输除的表中。除的表和触器表通常没有相同的行。可以从deleted 表中检查除的数据是否业务需求,如果不足,向用户报错误消息,并回插入操作,因器本身就是一个特殊的事务单元。

l 插入的表(Inserted)用于存INSERT UPDATE句所影响的行的副本。在插入

1DELETE

2AFTER DELETE

3记录DELETE

CREATETRIGGER [updtProductReview] ON [Production].[ProductReview]

AFTERUPDATE NOT FORREPLICATION AS

BEGIN

UPDATE[Production].[ProductReview]

SET [Production].[ProductReview].[ModifiedDate] = GETDATE()

FROM inserted

WHEREinserted.[ProductReviewID] =

[Production].[ProductReview].[ProductReviewID]

END

或更新事,新行将同被添加到插入的表和触器表。插入的表中的行是触

器表中的新行的副本。可以从inserted 表中检查插入的数据是否业务需求,

如果不足,向用户报错误消息,并回插入操作

l 更新事务类似于在除操作之后行插入操作;

首先,旧行被复制到除的表中,然后,新行被复制到触器表和插入的表中。

修改操作 inserted deleted表增加(INSERT)记录 存放新增的记录------

(DELETE)记录----- 存放被除的记录

修改(UPDATE)记录 存放更新后的记录 存放更新前的记录

3 INSTEADOF 器的工作方式

4 、嵌套触器的工作方式

CREATETRIGGER [delEmployee] ON [HumanResources].[Employee]

INSTEADOF DELETE NOT FORREPLICATION AS

BEGIN

SETNOCOUNT ON

DECLARE@DeleteCount int

SELECT@DeleteCount = COUNT(*)

FROM deleted

IF @DeleteCount > 0

BEGIN

END

END

 


本文出自 “Ricky's Blog” 博客,请务必保留此出处http://57388.blog.51cto.com/47388/1630405

46. SQL -触发器之概述

标签:服务器   触发器   create   数据库   数据表   

原文地址:http://57388.blog.51cto.com/47388/1630405

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!