什么是触发器?

  根据百度百科的解释,触发器是SqlServer提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,他的执行不是有程序调用,也不是手工启动,而是由事件来出发,比如当对一个表进行增删改时就会激活它执行。触发器经常用于加强数据的文整形越是和业务规则等,触发器可以从DBA_TRIGGERS,USER_TRIGGERS 数据字典中查找到,Sql3的触发器是一个能由系统自动执行对数据库修改的语句。

触发器与存储过程唯一的区别就是,触发器无法通过EXECUTE语句执行,而是在用户执行Transact_sql语句时自动触发。

 触发器的分类:

  • DML(数据操纵语言 Data Manipulation Language)触发器

    当数据库中表的数据发生变化时(Update、Insert、Delete)触发;主要用来强制执行业务规则,拓展约束,默认值等,因为约束只能约束同一张表的内容,而触发器则可以执行任意sql命令;

  • DDL(数据定义语言 Data Definition  Language)触发器

    在数据库结构发生变化时触发,主要用来记录数据库的修改过程,以及限制程序员对数据库的修改,比如不允许删除某些指定表等。

  • 登陆触发器

    主要响应登陆事件,如果登录失败则不触发登陆触发器。

触发器的优点?

  1、触发器可以通过数据库中的相关表实现级联更改;通过级联引用完整性约束可以有效地执行这些更改;

  2、可以实现比check越是定义的约束更为复杂的约束;

  3、触发器可以引用其他表中的列;

  4、触发器可以评估数据修改前后的表状态,并根据其差异采取对策。  

触发器的缺点?

  1、在进行数据库导入导出的时候,可能会引起不必要的触发器逻辑。

触发器的写法

  

create trigger trigger_name
on {table_name view_name}
{for After Instead of }
[ insert, update,delete ]
as
sql_statement

SQL Server为每个触发器都创建了两个专用表:Inserted表和Deleted表。这两个表由系统来维护﹐它们存在于内存中而不是在数据库中。这两个表的结构总是与被该触发器作用的表的结构相同。触发器执行 完成后﹐与该触发器相关的这两个表也被删除。
Deleted表存放由于执行Delete或Update语句而要从表中删除的所有行。
Inserted表存放由于执行Insert或Update语句而要向表中插入的所有行。

SqlServer学习之触发器的更多相关文章

  1. SQLServer 学习笔记之超详细基础SQL语句 Part 8

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 7------------------- --触发器str_trigge ...

  2. SQLServer 学习笔记之超详细基础SQL语句 Part 7

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 6------------------- 29 存储过程和触发器 存储过 ...

  3. Sqlserver与Mysql触发器之间的差别

    今天练习sqlserver,一开始感觉应该像Oracle,Mysql语法差不多,但是经过一下午的奋战,才感觉原来这三个数据库就是有区别啊, 我原来学习触发器的时候用的是Mysql,感觉还行,但是今天采 ...

  4. SQLServer学习笔记系列6

    一.写在前面的话 时间是我们每个人都特别熟悉的,但是到底它是什么,用什么来衡量,可能很多人会愣在那里.时间可以见证一切,也可以消磨一切,那些过往的点点滴滴可思可忆.回想往年清明节过后,在家乡的晚上总能 ...

  5. SQLServer学习笔记系列5

    一.写在前面的话 转眼又是一年清明节,话说“清明时节雨纷纷”,武汉的天气伴随着这个清明节下了一场暴雨,整个城市如海一样,朋友圈渗透着清明节武汉看海的节奏.今年又没有回老家祭祖,但是心里依然是怀念着那些 ...

  6. SQLServer学习笔记系列3

    一.写在前面的话 今天又是双休啦!生活依然再继续,当你停下来的时候,或许会突然显得不自在.有时候,看到一种东西,你会发现原来在这个社会上,优秀的人很多,默默 吃苦努力奋斗的人也多!星期五早上按时上班, ...

  7. SQLServer学习笔记系列2

    一.写在前面的话 继上一次SQLServer学习笔记系列1http://www.cnblogs.com/liupeng61624/p/4354983.html以后,继续学习Sqlserver,一步一步 ...

  8. SQLServer学习笔记<>相关子查询及复杂查询

    二.查询缺少值的查询 在这里我们加入要查询2008年每一天的订单有多少?首先我们可以查询下订单表的订单日期在2008年的所有订单信息. 1 select distinct orderdate,coun ...

  9. SQLServer 学习笔记之超详细基础SQL语句 Part 12(The End)

    Sqlserver 学习笔记 by:授客 QQ:1033553122 -----------------------接Part 11------------------- 现在,我们希望从 " ...

随机推荐

  1. 学PHP应注意的问题与知识点

    编出一手好代码,这个是需要你在平时开发中日积月累的,平时如果你有注意到以下的那些代码的编码,那么祝贺你,你在技能提升这方面已经垫下了一些基础,编写出一手好代码,说白了就是你特么注意到性能这块的问题,代 ...

  2. linux中如何配置vim的别名为vi?

    答: 向~/.bashrc中添加如下内容: alias vi=vim

  3. C++内容记录

    仅个人记录 https://ke.qq.com/course/336509 M了个J - 博客园 https://www.cnblogs.com/mjios/

  4. LVS+Keepalived小试牛刀

    一.ipvsadm命令1.基本命令操作1.1)添加规则 ipvsadm -A|E -t|u|f service-address [-s scheduler] [-p timeout] [-M netm ...

  5. cv2.bitwise_and的应用,

    import cv2 import numpy as np Load two images img1 = cv2.imread('messi.png') img2 = cv2.imread('logo ...

  6. xampp 启动mysql 显示busy

    1.端口被占用问题:2.默认3306端口并没有被占用:3.删除xampp\mysql\data\下的ibdata1再重启:4.没装其他mysql.

  7. ES6 javascript 实用开发方法技巧分享

    定义变量/常量 ES6 中新增加了 let 和 const 两个命令,let 用于定义变量,const 用于定义常量 两个命令与原有的 var 命令所不同的地方在于,let, const 都是块级作用 ...

  8. python列表删除--remove(),del,pop()

    remove()参数为列表元素,若在列表中,删除,不在则报错 如: pop()不带参数时默认删除列表的末尾元素并返回该元素,带参数时该参数为列表元素的下标值 不带参数: 以下标为参数: del 后面可 ...

  9. 卸载未能成功安装的mysql时的解决方案

    在win10系统中,首次未能成功安装mysql,于是试图卸载了mysql相关的应用,结果提示有卸载未完成的应用,无法卸载, 在阅读文档之后发现,可以在任务管理器中的详细信息中找到[dllhost.ex ...

  10. Python学习笔记——天气查询代码

    天气查询代码1 # 此程序无法运行,因为中国天气网的api接口被关闭了 import urllib.request import json import pickle #建立城市字典 pickle_f ...