触发器及触发器的作用

触发器及触发器的作用触发器及触发器的作用触发器是一种用来保障参照完整性的特殊的存储过程 它维护不同表中数据间关系的有关规则 当对指定的表进行某种特定操作 如 Insert Delete 或 Update 时 触发器产生作用 触发器可以调用存储过程 创建触发器的语法 11

触发器及触发器的作用

触发器是一种用来保障参照完整性的特殊的存储过程,它维护不同表中数据间关系的有关规则。当对指定的表进行某种特定操作(如:Insert,Delete或Update)时,触发器产生作用。触发器可以调用存储过程。

创建触发器的语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
Create Trigger[owner.]触发器名
 
On [owner.]表名
 
For {insert,update,delete}
 
As
 
Begin
 
SQL语句(块)
 
End

定义一个好的触发器对简化数据的管理,保证数据库的安全都有重要的影响。触发器是针对表一级的,这就意味着,只有表的所有者有权创建表的触发器。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 插入一个新行,必须保证外键与主键相匹配,触发器应该首先检查被插入行与主键表的连接。*/
 
#以下的触发器对inserted表和titles表的title_id进行比较,这里假设正在给外键输入数据,没有插入空值,若连接失败,事务被回退。insert,update,delete
 
Create trigger forinsertrigl
 
On salesdetail
 
For insert
 
As
 
If(
select 
count(*)
 
From title,inserted
 
Where titles.title_id=inserted.title_id)!=@@rowcount
 
Begin
 
Rollback transaction
 
Print “No,some title_id does not exist 
in 
titles.”
 
End
 
Else
 
Print “Added! All the title_id 
is 
exist 
in 
titles.”
 
/*
  
在本例中,@@rowcount代表添加到salesdetail表的行数,这也是添加到inserted表中的行数。通过连接表titles和表inserted来检测所有添加到salesdetail的title_id是否在titles中存在。若所连接的行数(count(*))与@@rowcount不同,由有一个或多个插入不正确,整个事务被取消。*/

  

触发器的限制:

●一个表最多只能有三个触发器,insert,update,delete

●每个触发器只能用于一个表

●不能对视图、临时表创建触发器

●Truncate table能删除表,但不能触发触发器

●不能将触发器用于系统表

合理地使用触发器对性能的影响是正面的。在设计和使用触发器时,经常地用sp_depends命令了解对象所关联的触发器是有好处的,该命令能列出触发器影响的所有对象、表和视等。

在定义几类数据库对象的时候,对存储过程、索引和触发器要给予特别的注意,尤其存储过程,它设计的好坏对数据库性能的影响很大。

说明:Sybase触发器使用的两个测试表:Deleted表和Inserted表,它们都是临时表,其结构与触发器的基表结构相同,用来存放与修改相关的数据行。

 

常见的触发器有三种:分别应用于Insert,Update,Delete事件。

使用触发器的优点

触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣。

触发器及触发器的作用

触发器是一种用来保障参照完整性的特殊的存储过程,它维护不同表中数据间关系的有关规则。当对指定的表进行某种特定操作(如:Insert,Delete或Update)时,触发器产生作用。触发器可以调用存储过程。

创建触发器的语法:

1
2
3
4
5
6
7
8
9
10
11
12
13
Create Trigger[owner.]触发器名
 
On [owner.]表名
 
For {insert,update,delete}
 
As
 
Begin
 
SQL语句(块)
 
End

定义一个好的触发器对简化数据的管理,保证数据库的安全都有重要的影响。触发器是针对表一级的,这就意味着,只有表的所有者有权创建表的触发器。

举例:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
/* 插入一个新行,必须保证外键与主键相匹配,触发器应该首先检查被插入行与主键表的连接。*/
 
#以下的触发器对inserted表和titles表的title_id进行比较,这里假设正在给外键输入数据,没有插入空值,若连接失败,事务被回退。insert,update,delete
 
Create trigger forinsertrigl
 
On salesdetail
 
For insert
 
As
 
If(
select 
count(*)
 
From title,inserted
 
Where titles.title_id=inserted.title_id)!=@@rowcount
 
Begin
 
Rollback transaction
 
Print “No,some title_id does not exist 
in 
titles.”
 
End
 
Else
 
Print “Added! All the title_id 
is 
exist 
in 
titles.”
 
/*
  
在本例中,@@rowcount代表添加到salesdetail表的行数,这也是添加到inserted表中的行数。通过连接表titles和表inserted来检测所有添加到salesdetail的title_id是否在titles中存在。若所连接的行数(count(*))与@@rowcount不同,由有一个或多个插入不正确,整个事务被取消。*/

  

触发器的限制:

●一个表最多只能有三个触发器,insert,update,delete

●每个触发器只能用于一个表

●不能对视图、临时表创建触发器

●Truncate table能删除表,但不能触发触发器

●不能将触发器用于系统表

合理地使用触发器对性能的影响是正面的。在设计和使用触发器时,经常地用sp_depends命令了解对象所关联的触发器是有好处的,该命令能列出触发器影响的所有对象、表和视等。

在定义几类数据库对象的时候,对存储过程、索引和触发器要给予特别的注意,尤其存储过程,它设计的好坏对数据库性能的影响很大。

说明:Sybase触发器使用的两个测试表:Deleted表和Inserted表,它们都是临时表,其结构与触发器的基表结构相同,用来存放与修改相关的数据行。

 

常见的触发器有三种:分别应用于Insert,Update,Delete事件。

使用触发器的优点

触发器是自动的:它们在对表的数据作了任何修改(比如手工输入或者应用程序采取的操作)之后立即被激活。

触发器可以通过数据库中的相关表进行层叠更改。例如,可以在 titles 表的 title_id 列上写入一个删除触发器,以使其它表中的各匹配行采取删除操作。该触发器用 title_id 列作为唯一键,在 titleauthor、sales 及 roysched 表中对各匹配行进行定位。

触发器可以强制限制,这些限制比用 CHECK 约束所定义的更复杂。与 CHECK 约束不同的是,触发器可以引用其它表中的列。例如,触发器可以回滚试图对价格低于 10 美元的书(存储在 titles 表中)应用折扣。



版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/226416.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月16日 下午10:57
下一篇 2026年3月16日 下午10:57


相关推荐

  • 初探Protostuff的使用[通俗易懂]

    初探Protostuff的使用[通俗易懂]初探Protostuff的使用最近在学习RPC,看到了一个叫做Protostuff的库,是基于谷歌ProtocalBuffer的序列化库,之前了解过ProtocolBuffer,对学习了一些资料后,写了个demo,记录下来。什么是ProtocolBuffer?ProtocolBuffer是谷歌出品的一种数据交换格式,独立于语言和平台,类似于json。Google提供…

    2022年6月7日
    37
  • java异常return在finally前面_java 异常处理

    java异常return在finally前面_java 异常处理java 的异常处理机制,执行顺序;return在异常中的使用 ;自定义异常类的简单应用异常处理2种方法:1.抛 (throws)2.自己处理try/catch/finally1.抛出:向上一级抛出,异常实际没有被解决掉2.try/catch/finally(1)正常执行public class Test1 { public static void main(String[] args) { Test1 test1 = new Test1(); test

    2022年8月8日
    6
  • sstap代理规则网页浏览器_一款Web调试代理工具:Fiddler

    sstap代理规则网页浏览器_一款Web调试代理工具:Fiddler前言在移动软件开发工作中 我们经常需要对 APP 软件进行调试及问题定位 在我们检查定位问题的时候 很多情况下需要查看接口的请求情况 当我们没有在调试模式的情况下 如何才能有效快捷的得到各个接口的请求情况呢 这个时候 我们就需要用到网络代理工具来监控接口请求 今天分享一款常用的 Web 调试代理工具 Fiddler 简介 Fiddler 是一款 Web 调试代理工具 用于记录计算机和 Internet 之间的所有 H

    2026年3月19日
    3
  • IP地址和网段划分

    IP地址和网段划分IP 地址相当于我们的门牌号 IP 是一张网卡在网络中的唯一通讯地址 具有良好的寻址能力 那么 IP 地址有些什么规律呢 下面 我们来一起研究一下 首先 IP 的含义 IP 是 InternetProt 网际互连协议 的缩写 是 TCP IP 体系中的网络层协议 设计 IP 的目的是提高网络的可扩展性 一是解决互联网问题 实现大规模 异构网络的互联互通 二是分割顶层网络应用和底层网络技术之间的耦合关系 以利于两者的独立发展 根据端到端的设计原则 IP 只为主机提供一种无连接 不可靠的 尽力而为的数据包传输服务 IP

    2025年9月21日
    4
  • 带通滤波器的设计[通俗易懂]

    带通滤波器的设计[通俗易懂]一、滤波器:滤波器按照频带划分可以分为:低通滤波器(LPF)、高通滤波器(HPF)、带通滤波器(BPF)、带阻滤波器(BEF)。其中射频天线领域主要采用带通滤波器(BPF)。二、带通滤波器(BPF):①:RFBPF:从天线中取出期望频带的有效信号,滤除不需要频带的电磁波信号和噪声。②:RFBPF:用下级混频器(降频混频器)进行频率转换时,防止在IF频带中引入干扰信号,用BP…

    2022年5月4日
    78
  • vispy 显示 kitti 点云数据

    vispy 显示 kitti 点云数据

    2020年11月8日
    302

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号