C#触发器知识总结及案例
触发器
- 触发器是在对表进行插入、更新、删除操作时自动执行的存储过程,常用于强制业务规则,是一种高级约束,可以定义比用check约束更为复杂的约束。可以执行复杂的SQL语句(if/while/case)
- 触发器可以定义在特定的表上,与表相关
- 自动触发执行
- 不能直接调用
- 是一个事务(可以回滚)
- 触发器的类型
(1) DELETE触发器
(2) INSERT触发器
(3) UPDATE触发器
- inserted表和deleted表
触发器触发时:
系统自动在内存中创建deleted表或inserted表
Deleted表和inserted表都是只读的,不允许修改;触发器执行完成后自动删除
Inserted表
临时保存了删除或更新前的记录行
可以从inserted表中检查插入的数据是否满足业务需求
如果不满足,则向用户报告错误消息,并回滚插入操作
Deleted表
临时保存了删除或更新前的记录行
可以从delered表中检查被删除的数据是否满足业务需求
如果不满足,则向用户报告错误消息,并回滚删除操作
注意:在执行insert操作时,先创建inserted表,将插入的语句放到inserted表中,判断插入语句是否是否符合业务需求,如果不满足就向用户保存错误消息,并回滚插入操作,如果满足则执行成功.
执行deleted操作时,先创建deleted表,将删除的语句放到deleted表中,判断删除的语句是否符合业务需求,如果不满足就想用户报告错误信息,并回滚删除操作,如果满足则执行成功
执行update操作时,先创建inserted表和deleted表,将要修改的表中数据加入deleted表中,
然后将修改后的数据放入inserted表中,判断语句是否符合业务需求,如果不满足就向用户保存错误消息,并回滚插入操作,如果满足则执行成功.
|
修改操作 |
inserted表 |
deleted表 |
|
增加(INSERT)记录 |
存放新增的记录 |
------ |
|
删除(DELETE)记录 |
----- |
存放被删除的记录 |
|
修改(UPDATE)记录 |
存放更新后的记录 |
存放更新前的记录 |
总结为表如下:
- 创建触发器
语法:
Create trigger 触发器名称
On 表名
[with encryption]
For[delete/insert/update]
As
T-SQL语句
GO
[with encryption]表示加密触发器定义的SQL文本
[delete/insert/update]指定触发器的类型
9.insert触发器的使用:
--当向交易信息表(transInfo)中插入一条交易信息时,
--我们应自动更新对应帐户的余额


- DELETE触发器的使用:
当删除交易信息表时,要求自动备份被删除的数据到表backupTable中 。

- UPDATE触发器的使用


11.UPDATE触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据
使用UPDATE(列)函数检测是否修改了某列
问题:
交易日期一般由系统自动产生,默认为当前日期。为了安全
起见,一般禁止修改,以防舞弊。

触发器还是一个特殊的事务单元,当出现错误时,可以执行ROLLBACK TRANSACTION回滚撤销操作
触发器一般都需要使用临时表:deleted表和inserted表,它们存放了被删除或插入的记录行副本
C#触发器知识总结及案例的更多相关文章
- 微信小程序知识总结及案例集锦
微信小程序知识总结及案例集锦 微信小程序的发展会和微信公众号一样,在某个时间点爆发 学习路径 微信小程序最好的教程肯定是官方的文档啦,点击这里直达 微信官方文档 认真跟着文档看一遍,相信有vue前端经 ...
- Java(19)接口知识及综合案例
作者:季沐测试笔记 原文地址:https://www.cnblogs.com/testero/p/15201629.html 博客主页:https://www.cnblogs.com/testero ...
- sql触发器知识
触发器中的Inserted和deleted临时表: SQL2000中,inserted表和deleted表用于存放对表中数据行的修改信息.他们是触发器执行时自动创建的,放在内存中,是临时表.当触发器工 ...
- HBase核心知识和应用案例
Hbase 热点问题? Hbase 预分区 Hbase Rowkey 设计原则 Hbase 常见避免热点问题方法 Hbase 总结 Hbase 连续查询的Rowkey设计 Hbase 随机查询的Row ...
- Oracle学习【索引及触发器】
索引B_Tree结构 请参照 响应图例 索引是一种允许直接访问数据表中某一数据行的树形结构,为了提高查询效率而引入,是独立于表的对象,可以存放在与表不同的表空间中.索引记录中存有索引关键字和指向表中数 ...
- 微软BI SSRS 2012 Metro UI Win 8 风格的报表课程案例全展示
开篇介绍 微软BI SSRS 2012 Metro UI 高端报表视频教程 (http://www.hellobi.com/course/15)课程从2014年6月开始准备,于2014年9月在 天善B ...
- 【SQL SERVER】触发器(一)
下面是个人对触发器知识的整理,触发器其实很简单,但想要编写发杂的触发器操作还是需要一定的SQL语句编写,触发器主要用于SQL SERVER约束.默认值和规则的完整性检查,还可以实现由主键和外键不能保证 ...
- LINQ查询知识总结
-------适合自己的才是最好的!!! LINQ查询知识总结:案例分析 案例:汽车表car,系列表brand,厂商表productor private MyCarDataContext _Cont ...
- quartz2.3.0(二)触发器Trigger花式Scheduler调度job
任务类 package org.quartz.examples.example2; import java.util.Date; import org.slf4j.Logger; import org ...
随机推荐
- OpenStack_I版 6.Neutron部署
Neutron是不能自己创建网络的,它需要借助插件才能创建虚拟网桥.网卡 依赖插件 配置ml2为核心插件 本次网络模型采用扁平化网络,不同的网络类型不同的配置,不同的使用方法 打开安全组功能 Linu ...
- 三:Linux 的基本命令、
Ubuntu切换用户 su root sudo passwd root 使用管理员提权修改root 登录密码 连续输入两次即可..... 重置root 用户密码 例:当前登录用户为:ubuntu,但是 ...
- Linux之shell典型应用之脚本实现
一. 提取Linux操作系统信息 二. 获取操作系统运行状态 三. 分析应用状态 四. 应用日志分析 第一章:VIM编辑器设置 一.语法高亮 syntax on/off 二.显示行号 set ...
- python基础—装饰器
python基础-装饰器 定义:一个函数,可以接受一个函数作为参数,对该函数进行一些包装,不改变函数的本身. def foo(): return 123 a=foo(); b=foo; print(a ...
- lvs-nat 模式-piranha
系统: redhat 6.5 mini 机器名 ip vip gw lvs01(主lvs) 192.168.10.10(外网) 192.168.20.10(内网) 192.168.10.254 lvs ...
- 【BZOJ3143】游走(高斯消元,数学期望)
[BZOJ3143]游走(高斯消元,数学期望) 题面 BZOJ 题解 首先,概率不会直接算... 所以来一个逼近法算概率 这样就可以求出每一条边的概率 随着走的步数的增多,答案越接近 (我卡到\(50 ...
- 【洛谷1855】 榨取kkksc03
题面 前面省去一堆背景内容 洛谷的运营组决定,如果一名oier向他的教练推荐洛谷,并能够成功的使用(成功使用的定义是:该团队有20个或以上的成员,上传10道以上的私有题目,布置过一次作业并成功举办过一 ...
- NTT中可用素数模数原根表
常用素数: P = 1004535809 ====> pr = 3 P = 998244353 =====> pr = 3 //(g 是mod(r*2^k+1)的原根) 素数 r k g ...
- javaweb get跟post 乱码解决
get中把tomact中的servel.xml 中 content 加上 URIEncoding="UTF-8"跟 useBodyEncodingForURL="true ...
- CCF-201803-2 碰撞的小球
问题描述 数轴上有一条长度为L(L为偶数)的线段,左端点在原点,右端点在坐标L处.有n个不计体积的小球在线段上,开始时所有的小球都处在偶数坐标上,速度方向向右,速度大小为1单位长度每秒.当小球到达线段 ...