SQL 触发器
2015-06-24 20:38
337 查看
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表的数据是更新前的或是删除的数据。
![](https://img-blog.csdn.net/20150624210649408?watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvemhvdWt1bjEwMDg=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center)
四、触发器的一些操作
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视频,但是当时幼稚的我没有理解里面的奥秘,这才知道学习是一个反复的过程,这是后在看触发器,有了不一样的感觉,其实,触发器的应用还很多,我只是将自己理解的写了上来,欢迎广大读者丢转。
一、触发器的形成原因:
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视频,但是当时幼稚的我没有理解里面的奥秘,这才知道学习是一个反复的过程,这是后在看触发器,有了不一样的感觉,其实,触发器的应用还很多,我只是将自己理解的写了上来,欢迎广大读者丢转。
相关文章推荐
- Android之获取手机上的图片和视频缩略图thumbnails
- 数据库链接字符串查询网站
- DB2实例管理
- DB2实例管理
- 保障MySQL数据安全的14个最佳方法
- mysql问答汇集
- 创建一个空的IBM DB2 ECO数据库的方法
- Access 2000 数据库 80 万记录通用快速分页类
- 开通一个数据库失败的原因的和解决办法
- 一个简单的asp数据库操作类
- CentOS下DB2数据库安装过程详解
- EasyASP v1.5发布(包含数据库操作类,原clsDbCtrl.asp)第1/2页
- sql2008 还原数据库解决方案
- Oracle 数据库自动存储管理-安装配置
- Oracle 数据库 临时数据的处理方法
- 数据库分页查询语句数据库查询
- 最近比较流行的数据库挂马
- 分割超大Redis数据库例子
- 推荐Sql server一些常见性能问题的解决方法