触发器

意义:本质上就是一个特殊的存储过程,只不过不是通过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=王五的性别。

11-11SQLserver基础--数据库之触发器的更多相关文章

  1. MySQL/MariaDB数据库的触发器

    MySQL/MariaDB数据库的触发器 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.触发器概述 1>.什么是触发器 触发器的执行不是由程序调用,也不是由手工启动,而是 ...

  2. 在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT) ORA-00922: missing or invalid option

    在Oracle 11.2的数据库中建表时遇到 RESULT_CACHE (MODE DEFAULT)  ORA-00922: missing or invalid option hostdr:[/ho ...

  3. 第二百八十四节,MySQL数据库-MySQL触发器

    MySQL数据库-MySQL触发器 对某个表进行[增/删/改]操作的前后如果希望触发某个特定的行为时,可以使用触发器,触发器用于定制用户对表的行进行[增/删/改]前后的行为. 1.创建触发器基本语法 ...

  4. Mysql数据库的触发器、存储引擎和存储过程

    数据库的触发器 1.触发器 触发器是MySQL响应以下任意语句而自动执行的一条MySQL语句(或位于BEGIN和END语句之间的一组语句): DELETE,INSERT,UPDATE 我们可以监视某表 ...

  5. 每天进步一点点------基础实验_08_触发器 :D、T触发器各一

    /********************************************************************************* * Company : * Eng ...

  6. plsql 数据库事件触发器

    --4.数据库事件触发器 需要超管的权限 /* 数据库事件触发器有数据库级和模式级两种. 前者定义在整个数据库上,触发事件是数据库事件,如数据库的启动.关闭,对数据库的登录或退出. 后者定义在模式上, ...

  7. 阿里P7整理“硬核”面试文档:Java基础+数据库+算法+框架技术等

    现在的程序员越来越多,大部分的程序员都想着自己能够进入大厂工作,但每个人的能力都是有差距的,所以并不是人人都能跨进BATJ.即使如此,但身在职场的我们一刻也不能懈怠,既然对BATJ好奇,那么就要朝这个 ...

  8. OCA读书笔记(11) - 实现Oracle数据库审计

    11 Implementing Oracle Database Auditing 描述DBA对于安全和审计的职责使能标准的数据库审计安全审计选项查看审计信息维护审计路径 最小权限原则只在计算机上安装所 ...

  9. sqlserver2008r2数据库使用触发器对sa及其他数据库账号访问进行IP限制

    一.只允许指定IP访问数据库 创建测试账号 CREATE LOGIN testuser WITH PASSWORD = '123' GO CREATE TRIGGER [tr_connection_l ...

随机推荐

  1. 实验吧—隐写术——WP之 欢迎来到地狱

    解压压缩包后出现三个文件.jpg .zip .docx 发现图片打开不显示,用winhex打开发现缺少文件头,将jpg的文件头补上 保存后图片可以打开 是一个百度网盘的链接,注意l和1的区别,网盘里是 ...

  2. [Perl] 删除数组中重复元素

    写一个小程序时候,需要去除一个数组中的重复元素,搜索了一下,找到的代码主要是两种,一种是使用grep函数,一种是转换为hash表,代码分别如下: 使用grep函数代码片段:代码: my @array ...

  3. .csv 和 .xls 的区别

    .csv 和 .xls 的区别 .csv .xls 较为通用,易导入至各式表格.资料库等 Microsoft excel的专用档案 文本档案,用记事本就可以打开 二进位档案,只有用excel才能打开 ...

  4. weex-toolkit 使用

    weex-toolkit 的github地址:https://github.com/weexteam/weex-toolkit weex-toolkit: 初始化的项目是针对开发单个 Weex 页面而 ...

  5. java 中一些需要注意的知识点

    java数组的length属性是容量,而不是数组真实元素的个数: 多线程中的interrupt()方法并不会终止处于"运行状态"的线程,它只是将线程的中断标记设为true. juc ...

  6. Open Flash Chart 之线图(二)

    上一节在研究Open Flash Chart时,漏掉不少东西,只是简单的熟悉了一下后端的属性设置.今天再来补充一下. 一.显示Open Flash Chart图表 Open Flash Chart 前 ...

  7. valgrind的使用--检测内存

    valgrind主要检测内存的使用情况,检测有否内存泄露等. 比如:test_va2.cpp #include<iostream> using namespace std; int mai ...

  8. opencv中的缩放函数

    图像处理里面缩放操作是比较常见的: 最近邻插值:类似简单映射的处理方式,目标图像w1,h1,原始图像w0,h0,则在目标图像上的点(x,y)的像素点实际对应原始图上(x*w0/w1,y*h0/h1)的 ...

  9. python中hashlib md5

    如下两种方法,结果相同 import hashlib import time m = hashlib.md5() m.update(str(time.time()).encode('utf-8')) ...

  10. Extjs下拉多选框

    //------录入时间,下拉列表框------ var inputTimeRow = new Ext.data.Record.create([ { name : 'value' },{ name : ...