触发器

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

定义:

在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用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. POJ 3597 Polygon Division 多边形剖分

    题目链接: http://poj.org/problem?id=3597 Polygon Division Time Limit: 2000MSMemory Limit: 131072K 问题描述 G ...

  2. 31_网络编程(Socket套接字编程)_讲义

    今日内容介绍 1.网络三要素及传输协议 2.实现UDP协议的发送端和接收端 3.实现TCP协议的客户端和服务器 4.TCP上传文件案例 01网络模型 *A:网络模型 TCP/IP协议中的四层分别是应用 ...

  3. angularJS1笔记-(14)-自定义指令(scope)

    index.html: <!DOCTYPE html> <html lang="en"> <head> <meta charset=&qu ...

  4. poi excel导入 数字自动加小数点

    问题:导入excel表,若表格中为整数数字,不管单元格设置成数字格式还是文本格式,导入时都会出现小数点和0. 我遇到的问题是:一个名称,做测试数据的时候做了纯整形数字,发现了这个问题. 解决办法:在代 ...

  5. 【第十周】final预发布视频

    final版本发布视频组名: 新蜂组长: 武志远组员: 宫成荣 谢孝淼 杨柳 李峤项目名称:java俄罗斯方块NEO平台:优酷地址:http://v.youku.com/v_show/id_XMTg0 ...

  6. Python实现奖金计算两种方法的比较

    应发奖金计算 简述:企业发放的奖金根据利润提成.利润(profit)低于或等于10万元时,奖金可提10%: 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成 ...

  7. BZOJ3462 DZY Loves Math II(动态规划+组合数学)

    容易发现这是一个有各种玄妙性质的完全背包计数. 对于每个质数,将其选取个数写成ax+b的形式,其中x=S/pi,0<b<x.那么可以枚举b的部分提供了多少贡献,多重背包计算,a的部分直接组 ...

  8. python配合Fiddler获取windows app登录时生成cookie实例

    工具Fiddler/python3 打开Fiddler,清空一下Fidder里面的请求记录 打开app,进行登录,注意Fiddler里的请求变化 在弹出app登录的时候Fiddler里已经有了四个请求 ...

  9. [CF1110E]Magic Stones

    题目大意:有一个长度为$n(n\leqslant10^5)$的数列$c$,问是否可以经过若干次变换变成数列$t$,一次变换为$c'_i=c_{i+1}+c_{i-1}-c_i$ 题解:思考一次变换的本 ...

  10. Spring点滴六:Spring中定义bean的继承

    在基于XML配置元数据中,bean标签可以包含很多配置信息,可以包含构造函数的参数,属性值以及其他一些初始化方法.子bean的定义可以继承父bean定义元数据,子bean定义可以根据需要重写父bean ...