当前位置:首页 > 实用技巧 >

触发器可以定义在视图上吗(怎么定义和使用触发器)

来源:原点资讯(www.yd166.com)时间:2024-01-08 21:59:51作者:YD166手机阅读>>

基本语法

创建:

create trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,delete ] as sql_statement

删除触发器:

drop trigger trigger_name

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

use jxcSoftware go select * from sysobjects where xtype='TR'

修改触发器:

alter trigger trigger_name on {table_name view_name} {for After Instead of } [ insert, update,delete ] as sql_statement

触发器禁用与启用

禁用:

ALTER TABLE trig_example DISABLE TRIGGER trig1 GO

恢复:

ALTER TABLE trig_example ENABLE TRIGGER trig1 GO

--禁用某个表上的所有触发器

ALTER TABLE 你的表 DISABLE TRIGGER all

--启用某个表上的所有触发器

ALTER TABLE 你的表 enable TRIGGER all

--禁用所有表上的所有触发器

exec sp_msforeachtable 'ALTER TABLE ? DISABLE TRIGGER all'

--启用所有表上的所有触发器

exec sp_msforeachtable 'ALTER TABLE ? enable TRIGGER all'

触发器的知识点

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

二: SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表。

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

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

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

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

触发器可以定义在视图上吗,怎么定义和使用触发器(1)

三:Instead of 和 After触发器

SQL Server2000提供了两种触发器:Instead of 和After 触发器。这两种触发器的差别在于他们被激活的同:

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

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

一个表或视图的每一个修改动作(insert,update和delete)都可以有一个instead of 触发器﹐一个表的每个修改动作都可以有多个After触发器。

两种触发器的工作流程:

Instead of:

SQL Server接到执行SQL语句请求->建立临时的Inserted 表与Deleted表->触发Instead Of触发器->结束。注意:此触发器将代替原来要执行的Insert、Delete 或update操作;

例如:A表有一个关于Instead of Insert 的触发器,向A表插入一行数据时,触发器将要代替“向A表插入一行数据的操作”,至于什么操作,由触发器的内容决定;

用途:

1.多表连接的视图数据更新,可以写相应的Instead of 语句去更新多个表;

2.数据库某些表禁止进行Insert、Delete、Update,则可以写Instead of Insert、Instead of Delete、Instead of Update来屏蔽原来要进行的操作。

After/for:

SQL Server接到执行SQL语句请求->建立临时的Inserted 表与Deleted表->执行SQL语句->触发Instead Of触发器->结束。

.一个操作同时存在于Instead of 与After中时,Instead of 的一定会执行,After的则不一定会执行。如果Instead里执行的是非激活类型的操作,则不会执行After里面同种类型的操作。例如:Insert语句同时存在于Instead of 与After中,如果Instead of Insert 里面执行的是非本表的Insert语句操作,那么After Insert 就不会执行了。

四:触发器的执行过程

如果一个Insert﹑update或者delete语句违反了约束﹐那幺After触发器不会执行﹐因为对约束的检查是在After触发器被激动之前发生的。所以After触发器不能超越约束。

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

实例:

1:在Orders表中建立触发器﹐当向Orders表中插入一条订单记录时﹐检查goods表的货品状态status是否为1(正在整理)﹐是﹐则不能往Orders表加入该订单。

create trigger orderinsert on orders after insert as if (select status from goods,inserted where goods.name=inserted.goodsname)=1 begin print 'the goods is being processed' print 'the order cannot be committed' rollback transaction --回滚﹐避免加入 end

2:在Orders表建立一个插入触发器﹐在添加一条订单时﹐减少Goods表相应的货品记录中的库存。

create trigger orderinsert1 on orders after insert as update goods set storage=storage-inserted.quantity from goods,inserted where goods.name=inserted.goodsname 3:在Goods表建立删除触发器﹐实现Goods表和Orders表的级联删除。 create trigger goodsdelete on goods after delete as delete from orders where goodsname in (select name from deleted)

instead of 触发器的用法

INSTEAD OF 触发器的主要优点是可以使不能更新的视图支持更新。基于多个基表的视图必须使用

INSTEAD OF触发器来支持引用多个表中数据的插入、更新和删除操作。INSTEAD OF触发器的另一个优点是使您得以编写这样的逻辑代码:在允许批处理的其他部分成功的同时拒绝批处理中的某些部分。

Transact-SQL语句创建两个基表、一个视图和视图上的INSTEAD OF触发器。以下表将个人数据和业务数据分开并且是视图的基表。

/*在视图上定义 instead of insert触发器以在一个或多个基表中插入数据。*/

--部门表

create table dept ( d_id int primary key, d_name varchar(20) )

--员工表

create table emp ( e_id int primary key, e_name varchar(20), d_id int references dept(d_id) ) select * from emp drop view v create view v as select e_id,e_name,d.d_id,d_name from emp e,dept d where e.d_id=d.d_id select * from v insert into v values(1001,'张珊',101,'销售部') /*******************使用instead of触发器******************/ drop trigger de_em_insert go create trigger de_em_insert on v instead of insert as begin if (not exists (select d.d_id from dept d, inserted i where d.d_id = i.d_id)) insert into dept select d_id,d_name from inserted if (not exists (select e.d_id from emp e, inserted i where e.d_id = i.d_id)) insert into emp select e_id,e_name,d_id from inserted else update emp set e_id = i.e_id,e_name = i.e_name from emp e, inserted i where e.d_id = i.d_id end

可以在视图或表中定义 INSTEAD OF DELETE触发器,以代替 DELETE语句的标准操作。通常,在视图上定义 INSTEAD OF DELETE触发器以便在一个或多个基表中修改数据。

可在视图上定义 INSTEAD OF UPDATE 触发器以代替 UPDATE语句的标准操作。通常,在视图上定义 INSTEAD OF UPDATE 触发器以便修改一个或多个基表中的数据

还有就是这我总结出了一些架构视频资料和互联网公司java程序员面试涉及到的绝大部分面试题和答案做成了文档和架构视频资料还有完整高清的java进阶架构学习思维导图免费分享给大家(包括Dubbo、Redis、Netty、zookeeper、Spring cloud、分布式、高并发等架构技术资料),希望能帮助到您面试前的复习且找到一个好的工作,也节省大家在网上搜索资料的时间来学习。

触发器可以定义在视图上吗,怎么定义和使用触发器(2)

资料领取方式:关注 私信关键字【资料】即可免费获取!!!

如果您喜欢本文章,可以点击关注,每天将有更多精彩文章与您分享!

栏目热文

创建触发器(在表格中创建触发器)

创建触发器(在表格中创建触发器)

什么是触发器触发器,就是一种特殊的存储过程。触发器和存储过程一样是一个能够完成特定功能、存储在数据库服务器上的SQL片段...

2024-01-08 21:38:26查看全文 >>

触发器能建立在视图上吗(触发器可以创建在哪个选项中)

触发器能建立在视图上吗(触发器可以创建在哪个选项中)

本章节主要来讲解的是MySQL中的视图、存储过程、存储函数和触发器,这些都是MySQL数据库中的存储对象,学好能助你涨薪...

2024-01-08 21:53:44查看全文 >>

触发器不能在视图上定义吗(触发器可以设置在视图上吗)

触发器不能在视图上定义吗(触发器可以设置在视图上吗)

触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过...

2024-01-08 21:55:46查看全文 >>

可以给视图建触发器吗(触发器模板在哪)

可以给视图建触发器吗(触发器模板在哪)

1. SQLite 视图(View)2. SQLite 触发器(Trigger)3. SQLite 索引(Index)3...

2024-01-08 21:49:00查看全文 >>

视图触发器(视图上创建触发器)

视图触发器(视图上创建触发器)

一、视图视图是一个虚拟表(非真实存在),其本质是【根据SQL语句获取动态的数据集,并为其命名】,用户使用时只需使用【名称...

2024-01-08 21:39:36查看全文 >>

为什么要创建触发器(为啥创建了触发器不能用)

为什么要创建触发器(为啥创建了触发器不能用)

前言: 触发器只是用在特定的场合,一般情况下,我们还是在代码中处理,因为同一个业务逻辑中,如果代码和sql中都有业务...

2024-01-08 21:50:59查看全文 >>

触发器模板在哪(触发器怎么添加)

触发器模板在哪(触发器怎么添加)

有朋友问什么是PPT触发器,从原理上讲其实很简单,微软官方给出的解释是:PPT触发器仅仅是PPT中的一项功能,它可以是一...

2024-01-08 21:59:19查看全文 >>

触发器如何创建(如何创建触发器)

触发器如何创建(如何创建触发器)

前段时间有个朋友说,他女朋友是一名教师,想要在课堂上给学生出一套练习题,答题模式为自主答题,但网上的自主答题软件有点贵,...

2024-01-08 22:17:16查看全文 >>

中维世纪云视通手机版(中维世纪app下载安装)

中维世纪云视通手机版(中维世纪app下载安装)

中维世纪视频汇聚,以融视云和云视通平台为依托,以端到端产品能力为保障,将分散的不同品牌、不同协议的视频资源进行统一整合和...

2024-01-08 22:05:07查看全文 >>

中维世纪录像机灯光设置(中维世纪录像机怎么设置最好)

中维世纪录像机灯光设置(中维世纪录像机怎么设置最好)

鱼塘、周界、道路等监控场景,越来越多地使用全彩摄像机监控,实现24小时彩色监控。最常见的是依赖摄像机的白光补光灯,在光线...

2024-01-08 22:27:58查看全文 >>

文档排行