【SQL SERVER】触发器(一)
下面是个人对触发器知识的整理,触发器其实很简单,但想要编写发杂的触发器操作还是需要一定的SQL语句编写,触发器主要用于SQL SERVER约束、默认值和规则的完整性检查,还可以实现由主键和外键不能保证的参照完整性和数据的一致性。总之,触发器也是很重要的知识点。
一、触发器的概念
触发器是一种特殊类型的存储过程,它不同于一般存储过程。一般存储过程通过存储过程名直接被调用,而触发器则通过事件进行触发而执行。
二、触发器的优点
1、触发器是自动的执行的;
2、触发器可以通过数据库的相关表进行层叠更改;
3、触发器的可以执行比CHECK约束更为复杂的操作。可以书写比较复杂的SQL语句,比如引用多个表,使用流程结构;
4、跟踪变化。触发器可以侦测数据库内的操作,比如表的数据更新,修改数据后的变化,如果不允许可以回滚修改操作;
5、拒绝或回滚违反引用完整性的操作,检查对表的操作是否违反引用完整性,从而决定提交还是回滚操作。
三、触发器的类型
1、Alter触发器:就是在某一语句(INSERT UPDATE DELETE)执行之后激活触发器。且只能在表上定义,可以为针对表的同一操作定义多个触发器。可以定义哪一个触发器先执行。
2、Instead Of触发器:就是在某一语句(INSERT UPDATE DELETE)执行之前激活触发器,但并不执行其定义的操作(INSERT UPDATE DELETE),而仅是执行触发器本身,同一操作只能定义一个Instead of触发器。
四、创建触发器
- Create Trigger必须是批处理的第一个语句;
- 创建触发器的权限默认分配给表的所有者,且不能将该权限转给其他用户;
- 触发器为数据库对象,其名称必须遵循标示符的命名规则;
- 虽然触发器可以引用当前数据库之外的对象,但只能在当前数据库中创建触发器;
- 虽然不能在临时表上货系统表上创建触发器,但是触发器可以引用临时表;
- 在含有Delete或update操作定义之外的外键表中个,不能定义Instead Of和Instead Of Update触发器;
- 虽然Truncate Table语句类似于没有Where字句的Delete语句,但她不会引发delete触发器,因为Truncate Table语句没有记录;
- Writetext语句不会引发Insert或update触发器;
- 当创建一个触发器时必须指定触发器名称,在哪一个表上定义触发器,触发器在何时激活,激活触发器的数据修改语句。
1、每一个触发器都包含3个操作;触发器的名称,激活触发器的操作,触发器的执行操作。
这里我们首先创建数据库和表;
CREATE DATABASE pubs
Use pubs
EXEC dbo.sp_addtype @typename=N'tid', @phystype='varchar(6)', @nulltype='NOT NULL', @owner=N'dbo'
EXEC dbo.sp_addtype @typename=N'id', @phystype='varchar(11)', @nulltype='NOT NULL', @owner=N'dbo'
GO
EXEC dbo.sp_addtype @typename=N'empid', @phystype='char(9)', @nulltype='NOT NULL', @owner=N'dbo'
GO CREATE TABLE [authors](
[au_id] [id] NOT NULL,
[au_lname] [varchar](40) NOT NULL,
[au_fname] [varchar](20) NOT NULL,
[phone] [char](12) NOT NULL,
[address] [varchar](40) NULL,
[city] [varchar](20) NULL,
[state] [char](2) NULL,
[zip] [char](5) NULL,
[contract] [bit] NOT NULL
) ON [PRIMARY] CREATE TABLE [employee](
[emp_id] [empid] NOT NULL,
[fname] [varchar](20) NOT NULL, [minit] [char](1) NULL,
[lname] [varchar](30) NOT NULL,
[job_id] [smallint] NOT NULL,
[job_lvl] [tinyint] NULL,
[pub_id] [char](4) NOT NULL,
[hire_date] [datetime] NOT NULL
) ON [PRIMARY]
例1、在数据库pubs的authors表上创建3个触发器
Create Trigger Insert_trigger
On authors Alter Insert
AS
Print'有新的人员被加入!'
GO Create Trigger update_trigger
On authors After update
AS
Print'有的人员被更新!'
GO Create Trigger Insert_trigger
On authors After delete
AS
Print'有的人员被删除!'
GO
如果有一些触发执行操作后,激活了触发器,但是并不希望触发操作都成功,我们可以在触发器的处理语句上进行回滚事务。
Create Trigger Insert_trigger
On authors After Delete
AS
if ‘Green’ in (Select au_lname from deleted)/*这里deleted是个逻辑表,我们下面会说到*/
Begin
Print '该信息不允许删除'
RollBack Transaction
End
GO
上面都是一些基本的触发器知识,希望对你有帮助!
【SQL SERVER】触发器(一)的更多相关文章
- sql server触发器的例子
发布:thebaby 来源:脚本学堂 [大 中 小] 本文介绍下,在sql server数据库中使用触发器的简单例子,有需要的朋友可以参考下,希望对你有一定的帮助. 原文地址:http:/ ...
- 15、SQL Server 触发器
SQL Server 触发器 触发器是一种特殊的存储过程,只有当试图用数据操作语言DML来修改数据时才会触发,DML包含对视图和表的增.删.改. 触发器分为DML触发器和DDL触发器,其中DML触发器 ...
- (转)SQL Server 触发器
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 ...
- 自己写的sql server触发器练练--高手请您跳过吧
set ANSI_NULLS ONset QUOTED_IDENTIFIER ONgo ALTER TRIGGER [insertReplyToic] ON [dbo].[bbsReplyTopic] ...
- sql server 触发器详细应用
SQL Server 触发器 触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发 ...
- SQL server触发器中 update insert delete 分别给写个例子被。
SQL server触发器中 update insert delete 分别给写个例子以及解释下例子的作用和意思被, 万分感谢!!!! 主要想知道下各个语句的书写规范. INSERT: 表1 (ID, ...
- 在Sql Server触发器中判断操作是Insert还是Update还是Delete
在Sql Server触发器中判断操作是Insert还是Update还是Delete DECLARE @IsInsert bit, @IsUpdate bit, @IsDelete ...
- 喜忧参半的SQL Server触发器
SQL Server触发器在非常有争议的主题.它们能以较低的成本提供便利,但经常被开发人员.DBA误用,导致性能瓶颈或维护性挑战. 本文简要回顾了触发器,并深入讨论了如何有效地使用触发器,以及何时触发 ...
- SQL Server触发器
一﹕ 触发器是一种特殊的存储过程﹐它不能被显式地调用﹐而是在往表中插入记录﹑更新记录或者删除记录时被自动地激活.所以触发器可以用来实现对表实施复杂的完整性约`束. 二﹕ SQL Server为每个触发 ...
- SQL Server 触发器
触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程.触发器主要是通过事件进行触发被自动调用执行的.而存储过程可以通过存储过程的名称被调用. Ø 什么是触发器 触发器对表进行插入.更新.删 ...
随机推荐
- re正则模块
1.正则表达式的常用符号 '.' 默认匹配除\n之外的任意一个字符,若指定flag DOTALL,则匹配任意字符,包括换行 '^' 匹配字符开头,若指定flags MULTILINE,这种也可以匹配上 ...
- McNemar test麦克尼马尔检验
sklearn实战-乳腺癌细胞数据挖掘(博主亲自录视频) https://study.163.com/course/introduction.htm?courseId=1005269003&u ...
- [吴恩达机器学习笔记]11机器学习系统设计3-4/查全率/查准率/F1分数
11. 机器学习系统的设计 觉得有用的话,欢迎一起讨论相互学习~Follow Me 参考资料 斯坦福大学 2014 机器学习教程中文笔记 by 黄海广 11.3 偏斜类的误差度量 Error Metr ...
- 无密码ssh登录linux
简介 ssh是常见的远程登录linux的方式,大部分时候需要输入用户名密码登录.本文介绍如何无密码登录linux,适用于mac和linux,windows不清楚. 不过这不是什么新的知识,基本上大家都 ...
- 2.redis设计与实现--链表
1.链表节点: 2.链表: 3.总结
- gcc 随笔
将几个文件编译成一个动态库 libtest.so gcc test_a.c test_b.c test_c.c -fPIC -shared -o libtest.so 将test.c与动态库libte ...
- 1-编程基础及Python环境部署
目录 1 编程基础 1.1 基本概念 1.2 语言分类 1.3 高级语言的发展 2 程序 3 python的语言介绍 4 Python的解释器 5 Python版本区别 6 Python安装 6.1 ...
- 在字符串S1中删除字符串S2中所包含的字符【转】
转自:http://www.cnblogs.com/tolimit/p/4202959.html /************************************************** ...
- JS时间转换的一个坑位
在做项目的时候,无意发现了一个小东西. new Date('2018-05-15') new Date('2018-5-15') 输出的结果是不同的,相差了8小时.然后让我回忆到之前看的一个时间转换函 ...
- 增加Android模拟器空间(Internal Storage)
转载 http://vase.iteye.com/blog/2114664 初学Android,发现模拟器上有不少限制,譬如标题中的存储限制,无论用ADT Manager如何设置,内部存储空间不会 ...