触发器使用户定义在关系表上的一类由事件驱动的特殊过程,也是一种保证数据完整性的方法。

触发器的主要作用是实现主键和外键不能保证的复杂的参照完整性和数据一致性。其他功能:

  • 强化约束:能够实现比CHECK语句更复杂的约束。
  • 跟踪变化:侦测数据库内的操作,从而不允许数据库中未经许可的指定更新和变化。
  • 级联运行:侦测数据库内的操作,并自动地级联影响整个数据库的各项内容。
  • 存储过程的调用:可以调用一个或多个存储过程。

触发器分两类(DML触发器和DDL触发器)

  • DML触发器:DML触发器是当数据库服务器中发生数据操作语言事件时执行的存储过程。
  • DDL触发器:DDL触发器是在响应数据定义语言事件时执行的存储过程,一般用于执行数据库中的管理任务、审核和规范数据库操作、防止数据库表结构被修改等。

DML触发器工作原理

DML触发器是发生数据操作语言时执行的触发器,主要针对添加、修改、删除进行触发。

SQL Server 2008中,为DML触发器定义了两个特殊的表:

  • 插入表INSERTED
  • 删除表

两张表再数据库服务器内存中,是由系统管理的逻辑表,用户只能读取。触发器完成工作后两张表会从内存中删除。

DML触发器分两类

  • AFTER触发器:在记录变更后才被激活,以删除为例。SQL接收到一个要执行删除操作的SQL语句时, SQL Server先将要删除的记录存放在删除表DELETED中,然后把数据表中的记录删除,再激活AFTER触发器,执行AFTER触发器中的SQL语句。执行完毕后,删除内存中的DELETED表,退出整个操作。
  • INSTEAD OF触发器:在INSERT、UPDATE、DELETE这些操作进行前被激活,并且不去执行原来的SQL操作,而是用触发器内部的SQL语句代替执行。

创建触发器

创建触发器需要指定以下几项内容:

  • 触发器的名称
  • 在其上定义触发器的表
  • 触发器将何时激活
  • 执行触发操作的编程语句

定义语句:

CREATE TRIGGER <触发器名>
ON  {表名 | 视图名}
[WiTH ENCRYPTION]
{AFTER|INSTEAD OF} {[INSERT][, ][UPDATE][, ][DELETE]}
[NOT FOR REPLICATION]
ASSQL语句

参数作用如下:

  • 触发器名:给出了触发器的名称
  • 表名|视图名:触发器所依存的表或视图名称
  • WITH ENCRYPTION:加密触发器代码,使用户无法查看,防止SQL Server对触发器进行复制
  • AFTER:表示触发器只有在SQL语句中指定的所有操作都已成功执行后才激活。(视图上面不可以定义AFTER触发器)
  • INSTEAD OF:表示在表或视图上执行增删改查操作时用该触发器中的SQL语句代替原语句。
  • [INSERT][, ][UPDATE][, ][DELETE]:说明激活触发器的条件,可选择多项
  • NOT FOR REPLICATION:表示在表的复制过程中对表的修改将不会激活触发器。
  • SQl语句:触发器所要执行的SQL语句,它可以是一组SQL语句,可以是包含流程的控制语句。

注释:在MySQL数据库中,对于INSERT语句, 只有NEW是合法的;对于DELETE语句,只有OLD才合法;而UPDATE语句可以在
和NEW以及OLD同时使用。

1.INSERT触发器

INSERT触发器在每次向基本表插入数据时,触发执行,该数据同时复制到基本表和内存的INSERTED表中。INSERT触发器主要有3个作用:

  • 检验要输入的数据是否符合规则
  • 在插入的数据中增加数据
  • 级联改变数据库中其他的数据表

2.DELETE触发器

DELETE触发器在从基本表中删除数据时触发执行,在用户执行了DELETE触发器后,SQL Server将删除的数据行保存在DELETED表中,即数据行并没有消失,还可以在SQL语句中引用。

DELETE触发器主要作用:

  • 防止删除数据库中的某些数据行
  • 级联删除数据库中其他表的数据行

3.UPDATE触发器

UPDATE触发器合并了DELETED触发器和INSERT触发器的作用。

用户在执行UPDATE语句后,原来数据行从基本表中删除,但保存在DELETED表中,同时基本表更新后的新数据行也在INSERTED表中保存了一个副本。

用户可以利用DELETED表和INSERTED表获取前后的数据行,完成比较操作。

4.INSTEAD OF触发器

INSTEAD OF触发器为替代性操作触发器,可用于视图操作。
在用视图修改基本表中的数据行时有可能导致失败。

解决方法之一:对视图建立INSTEAD OF触发器,通过触发器插入所缺的列值完成更新。

修改触发器

定义语句:

ALTER TRIGGER <触发器名>
ON  {表名 | 视图名}
[WiTH ENCRYPTION]
{AFTER|INSTEAD OF} {[INSERT][, ][UPDATE][, ][DELETE]}
[NOT FOR REPLICATION]
ASSQL语句

删除触发器

定义语句:

DROP TRIGGER 触发器名

SQL 触发器 简记相关推荐

  1. SQL触发器实例讲解1

    SQL触发器实例1 定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应 ...

  2. SQL触发器实例讲解

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程.        常见的触发器有三种:分别应用于Insert , ...

  3. sql 触发器未触发_学习SQL:SQL触发器

    sql 触发器未触发 SQL Triggers are another powerful database object we have at our disposal. In previous ar ...

  4. sql 触发器嵌套条件_SQL Server中的嵌套触发器

    sql 触发器嵌套条件 Nested Triggers in SQL Server are actions that automatically execute when a certain data ...

  5. sql 触发器未触发_SQL触发器–综合指南

    sql 触发器未触发 Hey, folks! In this article, we will be focusing on SQL Triggers in detail. 嘿伙计! 在本文中,我们将 ...

  6. 使用Navicat 设定 sql 触发器

    本片博客讲述如何用naticat设定sql触发器,并且将类型为datatime的时间分割为年.月.日.今年的第几周. 一.建表 新建表aaa和bbb 表aaa字段: 表bbb字段: 二.设置触发器 我 ...

  7. SQL 触发器-如何查看当前数据库中有哪些触发器

    在查询分析器中运行: use 数据库名 go select * from sysobjects where xtype= 'TR' sysobjects 保存着数据库的对象,其中 xtype 为 TR ...

  8. 什么是SQL触发器?SQL触发器是什么意思?

    什么是SQL触发器?SQL触发器是什么意思? 在SQL中,触发器是一种特殊类型的存储过程,它不同于SQL的存储过程.触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名字而被直接调用. ...

  9. mysql入库出库触发器_入库出库后库存自动更新的SQL触发器语句是什么?

    tb1(产品表)cpidcpnamecpcolorkucun1xxxxxx82xxxxxx7=================================tb2(入库表)riqirukucpid2 ...

  10. SQL触发器的使用及语法(转)

    定义: 何为触发器?在SQL Server里面也就是对某一个表的一定的操作,触发某种条件,从而执行的一段程序.触发器是一个特殊的存储过程. 常见的触发器有三种:分别应用于Insert , Update ...

最新文章

  1. python 调用linux命令-Python执行Linux系统命令的4种方法
  2. 鼠标一点打开几个网页
  3. CSS的DIV背景图放置(兼容IE6)
  4. javaScript第六天(1)
  5. 微信小程序时间标签与范围联动设计实现
  6. DB2数据库SQL语法大全推荐word版
  7. css设置按钮竖直方向居中_前端设计师必须知道的10个重要的CSS技巧
  8. JavaWeb学习之路
  9. 用存储过程生成实体类
  10. ubuntu 11.10 安装RTX 腾讯通
  11. 联想微型计算机m8000u配置,联想的产品介绍-20210412075714.pdf-原创力文档
  12. IC中的RDC中存在的亚稳态风险以及解决方案
  13. 前端和后端哪个工资更高呢?
  14. 基于文件夹目录生成CHM电子书
  15. [工作报告]转载:程序员绩效总结_年终总结怎么写?
  16. PHP 文字生成透明图片
  17. PHP的Apache自带的ab压力测试
  18. 少女心多功能便签本,少女心便签软件办公版
  19. Manifest和Repo使用详解
  20. 4. 非监督学习与强化学习简介

热门文章

  1. ma2灯光控制台 linux,ma2灯光控制台简易教程新.pdf
  2. 哈工大车万翔教授:ACL 2010-2020研究趋势总结
  3. 修改Windows用户名后用户路径没有修改的解决方案
  4. 企业运维实践-Nginx使用geoip2模块并利用MaxMind的GeoIP2数据库实现处理不同国家或城市的访问最佳实践指南...
  5. Android-Binder机制
  6. 小米盒子 smb Android,客厅里的多媒体 小米盒子SMB本地连接
  7. 无基础如何备考软考软件设计师?
  8. unity3d 破解
  9. ProE5.0有限元分析优化设计Mechanica视频教程
  10. 天堂 heaven