触发器

一 、触发器概述(特殊的存储过程)

定义:

在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用EXEC语句来调用,而触发器的执行不需要使用EXEC语句来调用.

作用:

  1. 实现由主键和外键所不能保证的复制的参照完整性和数据的一致性

  1. 他能够对数据库中的相关表进行级联修改

  2. 提供比 CHECK约束 更复杂的数据完整性,并自定义错误信息。

分类:

  1. 数据操作语言触发器 DML

    • 数据库操作语言 : update,Delete

  2. 数据定义语言触发器 DDL

    • 记录数据库更改事件

二、创建DML触发器

  • INSERT 触发器

  • DELETE 触发器

  • UPDATE 触发器

  • 替代触发器

  • 允许使用嵌套触发器

  • 递归触发器

5.25: 在Employee表上创建一个名为Employee_deleted的触发器,其功能: 当对表进行删除时,首先检查员工是否为 '人事部'员工,如果不是可以删除,否则撤销删除并显示'无法删除'

Create trigger employee_delete
on Department
After Delete
AS
Begin
Declary @x char()
Select @x = DepartmentName --变量来自数据库,用from
From Department if (@x = '人事部') --没有就用变量
Begin
print '无法删除'
RollBack --撤销都是RollBack
End
End --执行
Delete From Department Where Sname = '人事部'
  • 先删除,再撤销

Create trigger employee_delete
on Employee
After Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department D1, Deleted D2
Where D1.DepartmentID = D2.DepartmentID
If(@Dp = '人事部')
Begin
print '无法删除'
RollBack
End
End
  • 更新触发器(返回更新的记录)

Create trigger employee_update
on Stu_info
After Update
AS
Begin
Declare @StuCount Int
Select @StuCount = Count(*)
From stu_info Update Stu_sum
Set number = @StuCount Select S_id As 更新前学生编号, S_name As 更新前学生姓名
From Deleted Select S_id As 更新后学生编号, S_name As 更新后学生姓名
From Inserted
End --执行
Update Stu_info
Set S_name = '张三'
Where S_id =
  • Instead of (替代触发器)先判断,再操作

Create trigger employee_delete
on Employee
Instead of Delete
AS
Begin
Declare @Dp varchar()
Select @Dp = DepartmentName
From Department
If(@Dp = '人事部')
Begin
print '无法删除'
End
End
  • 禁止直接向表插入记录 操作

Create Trigger Insert_Forbidden
On Stu_Sum
After Insert
AS
Begin
Raiserror('不允许直接向该表插入记录, 操作被禁止', , )
RollBack Transaction
End
  • 触发器嵌套

    • 服务器 - > 属性 -> 杂项 -> 允许触发器激发其他触发器 -> true

  • 递归触发器

    • 数据库 -> 属性 -> 选项 -> 杂项 -> 递归触发器已启用 -> true

SQL语句(二十一)—— 触发器(DML触发器)的更多相关文章

  1. SQL Server 用SQL语句查找某个表的触发器

    select   *   from   sysobjects   where   xtype='TR'   and   parent_obj=object_id('表名') 再用sp_helptext ...

  2. Oracle常用sql语句(二)之组函数、多表查询

    DML(数据操纵语言) INSERT .UPDATE. DELETE 插入操作:INSERT: 语法: INSERT INTO 表名(列名1,列名2 ...)VALUES(列值1,列值2...); 注 ...

  3. 数据库 数据库SQL语句二

    单行函数 --操作数据对象 --接受参数返回一个结果 --只对一行进行变换 --每行返回一个结果 --可以转换数据类型 --可以嵌套 --参数可以是一列或一个值 字符函数 SQL> select ...

  4. SQL语句(十一)函数查询

    (十一)函数查询 1. 聚合函数 对一组值进行计算,得到一个返回值 SUM(), 求和 AVG(), 求平均 MIN(), 求最小 MAX(), 求最大 COUNT(), 计数,即个数 --例1 求所 ...

  5. 开发中常用的sql语句二

    sql 数字全角半角转换 create FUNCTION dbo.ConvertWordAngle ( ), --要转换的字符串 @flag bit --转换标志,0转换成半角,1转换成全角 )) A ...

  6. mysql 常用sql语句 二

    mysql 查询 基本查询 select * from users; 去重 select distinct(name),high from users order by high desc; ## 注 ...

  7. SQL 语句 (二) --- SELECT

    1 完整句法: SELECT [ ALL | DISTINCT TOP n [] WITH TIES select_list [INTO [new_table_name] ] [FROM {table ...

  8. SQL Server 数据库DML触发器 【一】

    今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内 ...

  9. SQL Server编程(06)触发器

    SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器 ...

随机推荐

  1. 【CSAPP笔记】12. 高速缓存存储器

    高速缓存存储器 在存储层次结构中,高速缓存存储器,也叫 cache 是最接近 CPU 寄存器的那一块. 更一般而言,缓存(caching)是一个无所不在的技术.缓存的意思是:对于每层的存储设备,位于 ...

  2. 关于javascript异步编程的理解

    在开发手机app的时候,要使用ajax想向后台发送数据.然后遇到了一个bug,通过这个bug,理解了ajax异步请求的工作原理.下面是登录页面的源代码. <!DOCTYPE html> & ...

  3. Head First Java & final

  4. C++编译与链接(2)-浅谈内部链接与外部链接

    发现每次写技术博客时,都会在文章开头处花费一番功夫 ...从前,有一个程序员....他的名字叫magicsoar 为什么有时会出现aaa已在bbb中重定义的错误? 为什么有时会出现无法解析的外部符号? ...

  5. js+Canvas 利用js 实现浏览器保存图片到本地

    <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title> ...

  6. [转]跨平台开发:PhoneGap移动开发框架初探

    目前,随着Google的Android手机和苹果的iphone手机的逐渐普及,越来越多开发者加入到移动应用开发的大军当中.其中,Android应用是基于Java语言基础上进行开发的,而苹果公司的iph ...

  7. 数据结构之二叉树java实现

    二叉树是一种非线性数据结构,属于树结构,最大的特点就是度为2,也就是每个节点只有一个左子树和一个右子树.二叉树的操作主要为创建,先序遍历,中序遍历,后序遍历.还有层次遍历.遍历有两种方式,一是采用递归 ...

  8. Java 继承和多态

                                                        Java  继承和多态 Java 继承 继承的概念 继承是java面向对象编程技术的一块基石,因 ...

  9. 为什么有时候访问某些加密https网站是不需要证书的? https? ssl?

    根证书是CA颁发给自己的证书, 是信任链的起点 1.所有访问https的网站都是需要证书的. 2.对于某些网站,尤其是证书颁发机构的网站,操作系统自动添加了这些网站访问需要的证书到证书管理器中,所以就 ...

  10. web接口测试中需要测试的几个点

    本文导读: web接口测试用例要包括欲测试的功能.应输入的数据和预期的输出结果,只有在数据能正确流入.流出模块的前提下,其他测试才有意义.下面介绍在web测试接口时一些需要注意的点 1.接口返回 数据 ...