触发器

意义:本质上就是一个特殊的存储过程,只不过不是通过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. hdu1281 棋盘游戏 二分图最大匹配

    小希和Gardon在玩一个游戏:对一个N*M的棋盘,在格子里放尽量多的一些国际象棋里面的“车”,并且使得他们不能互相攻击,这当然很简单,但是Gardon限制了只有某些格子才可以放,小希还是很轻松的解决 ...

  2. Windows下同一台机器上elasticsearch集群的配置以及elasticsearch-head插件的使用

    ElasticSearch是一个基于Lucene的开源搜索服务器,现已经被越来越多的企业运用于项目当中,笔者为了学习es在自己机器上简单的搭建了一个es集群,此文权当记录. 1.我用到的压缩包 下载地 ...

  3. 【maven】Maven根据Profile读取不同配置环境配置文件

    开发需求:在日常开发中,我们大多都会有开发环境(dev).测试环境(test).生产环境(product),不同环境的参数肯定不一样,我们需要在打包的时候,不同环境打不同当包,如果手动改,一方面效率低 ...

  4. 保存csv时, 不保留index

    pd.to_csv('your.csv', index=False)

  5. 序列化效率比拼——谁是最后的赢家avaScriptSerializer方式、DataContract方式、Newtonsoft.Json

    前言:作为开发人员,对象的序列化恐怕难以避免.楼主也是很早以前就接触过序列化,可是理解都不太深刻,对于用哪种方式去做序列化更是随波逐流——项目中原来用的什么方式照着用就好了.可是这么多年自己对于这东西 ...

  6. 监控Linux的Steps&Q&A

    spolight的下载地址:https://www.quest.com/spotlight-on-windows/ 问题1.sar -u 之后,只有一条记录.这种情况执行一下:sudo sar -d; ...

  7. 使用python生成词云

    什么是词云呢? 词云就是一些关键词组成的一个图片.大家在网上经常看到,下面看一些例子: 那用python生成一个词云的话怎么办呢,首先要有一些词,咱们随便找个吧,用see you again的歌词好了 ...

  8. hadoop伪分布式环境搭建之linux系统安装教程

    本篇文章是接上一篇<超详细hadoop虚拟机安装教程(附图文步骤)>,上一篇有人问怎么没写hadoop安装.在文章开头就已经说明了,hadoop安装会在后面写到,因为整个系列的文章涉及到每 ...

  9. oracle 导入excel

    方法二.利用PLSQL Developer使用PLSQL Developer工具,这个可是大名鼎鼎的Oracle DBA最常使用的工具.在单个文件不大的情况下(少于100000行),并且目的表结构已经 ...

  10. win7 X64 使用VS2008 ->编译报错LINK : fatal error LNK1000: Internal error during Incr的解决

    编译报错LINK : fatal error LNK1000: Internal error during Incr的解决 Win7 旗舰版 Microsoft Visual Studio 2008 ...