SQL语句(二十一)—— 触发器(DML触发器)

触发器

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

定义:

在修改指定表值的数据时执行的 存储过程. 不同的是 : 执行存储过程要使用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(10)
    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(50)
    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 = 1
  • Instead of (替代触发器)先判断,再操作

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

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

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

    • 数据库 -> 属性 -> 选项 -> 杂项 -> 递归触发器已启用 -> true
时间: 2024-12-18 17:37:16

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

应用索引技术优化SQL 语句二

四.分析执行计划创建索引   根据语句的执行计划来判断应该对什么表创建什么索引,是常用优化技巧.其实文章前面的例子已经告诉读者如何结合statistics profile 和statistics IO语句的输出来创建索引.这里分析一个稍微复杂一些的例子. SQL语句如下: SELECT CurrentseNo FROM v_ptdata_edss WHERE MRN = @P1 Statistics IO的输出如下: Table 'ptseoutpat'. Scan count 2, logic

数据库 数据库SQL语句二

单行函数 --操作数据对象 --接受参数返回一个结果 --只对一行进行变换 --每行返回一个结果 --可以转换数据类型 --可以嵌套 --参数可以是一列或一个值 字符函数 SQL> select lower('HELLO') 大写转小写,upper('hello2') 小写转大写,initcap('hellothis world') 首字母大写 from dual; 大写 小写转 首字母大写 ----- ------ ---------------- hello HELLO2 Hello Thi

SQL 语句 (二) --- SELECT

1 完整句法: SELECT [ ALL | DISTINCT TOP n [] WITH TIES select_list [INTO [new_table_name] ] [FROM {table_name | view_name2} [ (optimizer_hints) ] [ [ , {table_name2 | view_name2} [ (optimizer_hints) ] [... ,            table_name16  | view_name16 ] [ (op

sql 语句 二

选单列数据 select name from totoro; 选两列数据 select id,name from totoro; 选单列中不重复的数据 select distinct name from totoro; 选出name列中名字是pangpang3的数据 select * from totoro where name='pangpang3'; 选出age>3的数据 select * from totoro where age>3; and select * from totoro

mysql 常用sql语句 二

mysql 查询 基本查询 select * from users; 去重 select distinct(name),high from users order by high desc; ## 注意 distinct必须放在第一位,desc降序,distinct不会对结果进行排序select * from users group by name; 过滤 select * from users limit 3 order by desc; 聚合函数

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

今天学习SQL Server数据库中DML触发器(DDL触发器以后有时间继续学习). 当删除一条创建有触发器的表中的内容时,触发器执行SQL语句. 1.首相先创建一张表,表名称是 [Test] , 内有三个字段,分别是 [Name], Sex, Place. 1 use inter 2 create table Test 3 ( 4 [Name] varchar(20) not null, 5 Sex varchar(20) not null, 6 Place varchar(20) not n

杂谈--DML触发器学习

触发器按类型分为三类: 1. DML 触发器,在数据变更时触发: 2. DDL 触发器,在修改数据库级别或实例级别对象时触发: 3. Login 触发器,在用户登录时触发: 最常见的是DML触发器,DML触发器又可以分为两类: INSTEAD OF触发器和AFTER触发器(部分书上有提到FOR触发器,其实就是AFTER 触发器,只是写法不同而已). 从功能来看,INSTEAD OF触发器用来替换实际的数据修改操作,而AFTER触发器用来在实际操作完成后进行后续操作.例如对于DELETE操作,如果

SQL Server编程(06)触发器

SQL Server 通过触发器用来保证业务逻辑和数据的完整性.在SQL Server中,触发器是一种特殊类型的存储过程,可在执行语言事件时自动触发.SQL Server中触发器包括三种:DML触发器.DDL触发器和登录触发器. DML触发器:执行DML语句触发执行,例如操作数据表或视图的insert.update.delete语句,不包含select. DDL触发器:执行DDL语句时触发执行,例如create table等语句. 登录触发器:在用户登录SQL Server实例创建会话时触发.

MySQL(十一)之触发器

上一篇介绍的是比较简单的视图,其实用起来是相对比较简单的,以后有什么更多的关于视图的用法,到时候在自己补充.接下来让我们一起了解一下触发器的使用! 一.触发器概述 1.1.什么是触发器 触发器(Trigger):监视某种情况,并触发某种操作.在MySQL Server里面也就是对某一个表的一定的操作,触发某种条件(Insert,Update,Delete 等),从而自动执行的一段程序. 注意:你必须拥有相当大的权限才能创建触发器(CREATE TRIGGER),如果你已经是Root用户,那么就足