• 11-11SQLserver基础--数据库之触发器


    触发器

    意义:本质上就是一个特殊的存储过程,只不过不是通过exec来调用执行,而是通过增删改数据库中的操作来执行。

    作用:1、将关联的表之间的数据增删改
            2、触发器可以操作视图,在视图上建触发器
            3、忘记建立触发器的表的名称,全部禁用

           alter table teacher disable trigger all--忘记名字的禁用表的全部触发器,记得名字将all改成表的名称
           alter table teacher enable trigger all --开启数据表的所有触发器

    ----创建触发器

    格式:

    create trigger TR_(表名)_(增/删/改操作)

    on +(表名)

    for,after/instead of +(增/删/改操作)---这里的操作必须同创建的触发器的名称中的增删改操作保持一致

    as

       --执行触发器的整个过程

    go

    (增/删/改操作) from (表名) where(条件)  ---增删改必须和上面的增删改操作一致

    【注意事项1】

    for与instead of 的区别:

    for/after --是指在执行删除操作之后引发触发,for可以使用after代替。

    instead of--是指在触发之前删除,当删除时先引发触发器,用触发器里的操作替换本来的操作。

    【注意事项2】

    1、在操作时,注意在使用触发器时要将增删改操作保持一致。

    2、当关联的表之间存在主外键约束的情况下,不能直接删除主键表的数据,需要先把外键表的数据删除才可以。

    【实例1】

     create trigger TR_student_Delete  ---创建触发器
     on student---选择在哪个表上建立触发器
     --for delete   --原因:for 在执行删除之后引发触发,for可以用after代替
     instead  of delete --instead of +delecte/insert/update
     --instead of 在触发之前删除,当删除时先引发触发器,用触发器里的操作替换本来的操作
     as
        --delete from score where sno='109'  ---书写存储过程
          insert into student values('108','曾华','男','1977-09-01',‘教授’,‘计算机系’)
          --delete from student where sno='109'
     go
    delete from student where Sno='109'---当表与表之间存在主外键约束时,主键表的数据不能删除
    select *from huizong

    【注意】当出现以上错误时,是因为student表和score表之间存在主外键约束,所以不能直接对主键表进行增删改操作。

    正确方法:首先将外键表score表中Sno=‘109’这一列数据删除之后再对主键表操作。

    ---删除(用instead of)

    ---删除(用for)

    ---修改(用 instead of)

    ---修改(用 for)

    ---插入(用 for)

    ---插入(用 instead of)

    【实例2】

    【案例3】在teacher表中插入一行数据,改变插入的数据中 tno=王五的性别。

  • 相关阅读:
    程序相关概念
    C/C++程序语言概念
    详解QT5.10.0搭载OpenCV3.4.0环境配置步骤说明
    微信小程序支付结果 c#后台回调
    信小程序支付(C#后台+前台)
    微信小程序知识集锦
    WPF获取读取电脑指定文件夹中的指定文件的地址
    WPF后台动画DoubleAnimation讲解
    wpf datagrid 的单元格内容超出列宽度
    WPF实现3D翻转的动画效果
  • 原文地址:https://www.cnblogs.com/xiaoqingshe/p/4090643.html
Copyright © 2020-2023  润新知