关于sql seversql触发器器的


SQL菜鸟入门级教程之sql触发器器

本人沝平有限写此博客只为给那些像我一样的菜鸟一点小小的帮助,还请各位大牛不要见笑

的重要性就不用我多说了吧,我们做的大多数項目都要跟数据库打交道因此,熟练掌握数据库的各种操作就成了一个程序员必备的技能。今天我们就来简单说一下sql触发器器

sql触发器器(trigger)是种特殊的存储过程,它的执行不是由程序调用也不需要手动操作,它是由事件来sql触发器事件大家应该非常熟悉吧,比如按鈕的Click事件、网页的Load事件等按钮的Click事件是通过鼠标单击按钮sql触发器的,而sql触发器器的事件是由对表进行增删改操作所sql触发器的。当对一個数据库或表进行增删改( InsertDelete,Update)的时就会激活sql触发器器

从SQL2005开始,根据SQL语句的不同将sql触发器器分成了两类一类是DMLsql触发器器,一类是DLLsql触發器器其中DMLsql触发器器又分为两类:Aftersql触发器器和Instead Ofsql触发器器。

DMLsql触发器器:DML(Data Manipulation Language)sql触发器器是当数据库服务器中发生数据操作语言事件时执行的存储过程DMLsql触发器器又分为两类:Aftersql触发器器和Instead Ofsql触发器器

DDLsql触发器器:DDLsql触发器器是在响应数据定义语言(Data Definition Language)事件时执行的存储过程。DDLsql触发器器┅般用于执行数据库中管理任务如审核和规范数据库操作、防止数据库表结构被修改等。

今天我们我们主要介绍DMLsql触发器器DMLsql触发器器分為Aftersql触发器器和Instead Ofsql触发器器。

Aftersql触发器器:这类sql触发器器是在记录已经改变完之后(after)才会被激活执行,它主要是用于记录变更后的处理或检查一旦发现错误,也可以用Rollback Transaction语句来回滚本次的操作

Instead Ofsql触发器器:这类sql触发器器一般是用来取代原本的操作,在记录变更之前发生的它並不去执行原来SQL语句里的操作(Insert、Update、Delete),而去执行sql触发器器本身所定义的操作

在SQL Server里,每个DMLsql触发器器都分配有两个特殊的表一个是Inserted表,┅个是Deleted表它们两个存在于数据库服务器的内存中,是由管理的逻辑表是两个临时表,而不是真正存储在数据库中的物理表用户对这兩个表只有读取的权限,没有修改的权限

这两个表的结构(主外键、字段、数据类型等)与sql触发器器所在数据表的结构是完全一致的,当sql触發器器的工作完成之后这两个表也将会从内存中删除。

Inserted:对于插入记录操作来说插入表里存放的是要插入的数据;对于更新记录操作來说,插入表里存放的是要更新的记录

Deleted:对于更新记录操作来说,删除表里存放的是被更新记录;对于删除记录操作来说删除表里存叺的是被删除的旧记录。    

看上面两句话可能不太明白那么看看下面这张表是不是就明白了?

Aftersql触发器器的工作原理:

Aftersql触发器器是在SQL语句执荇之后才被激活的以删除记录为例:当SQL Server接收到一条删除操作的SQL语句时,SQL Server先将要删除的记录存放在Deleted表里然后把数据表里的记录删除,再噭活Aftersql触发器器执行Aftersql触发器器里的SQL语句。执行完毕之后 删除内存中的Deleted表,操作结束

还是举上面的例子:在产品库存表里,如果要删除┅条产品记录在删除的时候,sql触发器器可以检查该产品库存数量是否为零如果不为零则取消删除操作。数据库的操作如下:

1接收SQL语呴,将要从产品库存表里删除的产品记录取出来放在删除表里。

2从产品库存表里删除该产品记录。

3从删除表里读出该产品的库存数量字段,判断是不是为零如果为零的话,完成操作从内存里清除删除表;如果不为零的话,用Rollback Transaction语句来回滚操作(即将库存表还原成删除の前的状态)

Instead Ofsql触发器器与Aftersql触发器器不同。Aftersql触发器器是在Insert、Update和Delete操作完成后才激活的而Instead Ofsql触发器器,是在这些操作进行之前就激活了并且不洅去执行原来的SQL操作,而是用sql触发器器本身的SQL语句代替原来的语句去执行

还拿上面那个例子来说,删除一条产品记录的时候用Instead Of将删除操作替换成查询该产品的库存。数据库的操作如下:

1接收SQL语句,但不执行而是跳转到Instead Of后面的SQL语句

2,根据传入的产品ID将该产品的库存取出,完成操作

说了那么多理论上的东西,下面让我们看看sql触发器器的代码到底怎么写:

下面的一段代码是sql触发器器的一个框架

   -- 后面昰sql触发器器被sql触发器的条件,最少有一个可以邮多个。如果有多个用逗号分开顺序无要求。    

AS --sql触发器器要执行的操作

   --BEGIN跟END组成一个代码块可以写也可以不写,如果sql触发器器中执行的SQL语句比较复杂用BEGIN和END会让代码更加整齐,更容易理解

GO --GO就代表结操作完毕

1,Aftersql触发器器只能用於数据表不能用于视图;Instead Ofsql触发器器两者皆可设置为With Check Option的视图也不允许建立Instead Ofsql触发器器。两种sql触发器器都不可以建立在临时表上

2,一个数据表可以有多个sql触发器器但是一个sql触发器器只能对应一个表。

3在同一个数据表中,对每个操作(如Insert、Update、Delete)而言可以建立许多个Aftersql触发器器而Instead Ofsql触发器器针对每个操作只有建立一个。

4如果针对某个操作即设置了Aftersql触发器器又设置了Instead Ofsql触发器器,那么Instead ofsql触发器器一定会激活而Aftersql触发器器就不一定会激活。

5不同的SQL语句,可以sql触发器同一个sql触发器器如Insert和Update语句都可以激活同一个sql触发器器。

6sql触发器器名在所在的数据库裏必须是唯一的。由于sql触发器器是建立中数据表或视图中的所以有很多人都以为只要是在不同的数据表中,sql触发器器的名称就可以相同其实sql触发器器的全名(Server.Database.Owner.TriggerName)是必须 唯一的,这与sql触发器器在哪个数据表或视图无关

7,关键字AFTER可以用For来代取它们的意思都是一样的,代表只有在数据表的操作都已正确完成后才会激活的sql触发器器

}

SQLServer数据库sql触发器器 的创建删除,修改查看

0

摘要:本文主要向大家介绍了SQLServer数据库sql触发器器 的创建,删除修改,查看通过具体的内容向大家展现,希望对大家学习SQLServer数据庫有所帮助

本文主要向大家介绍了SQLServer数据库sql触发器器 的创建,删除修改,查看通过具体的内容向大家展现,希望对大家学习SQLServer数据库有所帮助

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

二: SQL Server为每个sql触发器器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在於内存中而不是在数据库中这两个表的结构总是与被该sql触发器器作用的表的结构相同。sql触发器器执行 完成后﹐与该sql触发器器相关的这两個表也被删除
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行

Instead ofsql触发器器用于替代引起sql触发器器执行的T-SQL语句。除表之外﹐Instead of sql触发器器也可以用于视图﹐用来扩展视图可以支持的更新操作

Aftersql触发器器在一个Insert,Update或Deleted语句之后执行﹐进荇约束检查等动作都在Aftersql触发器器被激活之前发生。Aftersql触发器器只能用于表

一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of sql触发器器﹐一个表的每个修改动作都可以有多个Aftersql触发器器。
如果一个Insert﹑update或者delete语句违反了约束﹐那幺Aftersql触发器器不会执行﹐因为对约束的检查是在Aftersql触发器器被噭动之前发生的所以Aftersql触发器器不能超越约束。

Instead of sql触发器器可以取代激发它的操作来执行它在Inserted表和Deleted表刚刚建立﹐其它任何操作还没有发生時被执行。因为Instead of sql触发器器在约束之前执行﹐所以它可以对约束进行一些预处理

五:使用T-SQL语句来创建sql触发器器

七:查看数据库中已有sql触发器器:

6:Orders表建立一个插入sql触发器器,保证向Orders表插入的货品信息要在Order表中添加

本文由职坐标整理并发布希望对同学们学习SQL Server有所帮助,更多内嫆请关注职坐标数据库SQL Server数据库频道!

本文由 @小标 发布于职坐标未经许可,禁止转载

看完这篇文章有何感觉?已经有0人表态0%的人喜欢 赽给朋友分享吧~

}

我要回帖

更多关于 sql触发器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信