触发器-- 肖敏_入门系列_数据库进阶 60、触发器(三) --youku
二
https://v.youku.com/v_show/id_XMzkxOTc5NDY0OA==.html?spm=a2h0k.11417342.soresults.dtitle
三
https://v.youku.com/v_show/id_XMzkyMTM1MDMxNg==.html?spm=a2h0k.11417342.soresults.dtitle
CREATE TRIGGER v_entity_trg_u
ON v_entity
FOR update
AS
declare @old_file_id id_TY, @new_file_id id_TY, @old_file_line int, @new_file_line int
select @old_file_id = file_id, @old_file_line = file_line from deleted
select @new_file_id = file_id , @new_file_line = file_line from inserted
IF @old_file_id ! = @new_file_id OR @old_file_line != @new_file_line
BEGIN
insert into v_entity_hist (ent_id, action, file_id, file_line, last_chg_dt)
select ent_id, action, file_id, file_line, last_src_dt from deleted
END
1.
银行信息表account,交易信息表transinfo,现增加一笔交易记录
则account表账户余额应该变化
2.
这两个过程是一个整体,要么都执行,要么都不执行
begin transaction
向交易信息表插入数据
在账户表中修改数据
Commit transaction
如果失败
Rollback transaction
触发器:只要用户向交易信息表中插入了数据,系统会自动在账户表中修改数据
自动执行,整个过程是一个事务
Create TRIGGER trigger_name
ON table_name [with encryption]
FOR {[insert/update/delete]}
AS
SELECT sentence
GO
------------------------------------eg--------------
id从一万开始
create table Account
(
id int identity(10000, 1) primary key,
name nvarchar(16) not null,
balance int not null,---money left
)
create table TransInfo
(
id int identity(1, 1) primary key,
accountId int not null,
[type] int not null, -- 1 deposit 0 withdraw
amount int not null,
createDatetime datetime not null
)
alter table TransInfo -- 建立约束
add constraint FK_ACCOUNTID foreign key (accountId)
references Account(id);
insert into dbo.Account
select '郭靖' 5000 union
select '黄蓉' 10000
--针对新增交易记录,修改账户表的余额
create trigger tg_transinfo_insert
on TransInfo
for insert
as
--需要从新插入的数据中,取出交易数据
--账户编号,交易金额,交易类型
--系统有2临时表:inserted 存放最新加入的数据
--deleted 存放被删除的或被修改的原始数据
declare @accId int, @amount int, @type int
select @accId=accountId, @type=type, @amount=amount
from inserted --拿到新加入的数据
if(@type = 0)
begin
set @amount = @amount * -1;
end
update Account
set balance = balance + @amount
where id = @accId
go
触发器不用手动调用
当insert会自动调用
insert into TransInfo
select 10000, 0, 100, GETDATE()
declare @old_file_id id_TY, @new_file_id id_TY, @old_file_line int, @new_file_line int
select @old_file_id = file_id, @old_file_line = file_line from deleted
select @new_file_id = file_id , @new_file_line = file_line from inserted
IF @old_file_id ! = @new_file_id OR @old_file_line != @new_file_line
BEGIN
insert into v_entity_hist (ent_id, action, file_id, file_line, last_chg_dt)
select ent_id, action, file_id, file_line, last_src_dt from deleted
END
触发器-- 肖敏_入门系列_数据库进阶 60、触发器(三) --youku的更多相关文章
- Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)
不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...
- Java入门系列之StringBuilder、StringBuffer(三)
前言 上一节我们讲解了字符串的特性,除了字符串类外,还有两个我们也会经常用到的类,那就是StringBuffer和StringBuilder.因为字符串不可变,所以我们每次对字符串的修改比如通过连接c ...
- 【Lucene3.6.2入门系列】第04节_中文分词器
package com.jadyer.lucene; import java.io.IOException; import java.io.StringReader; import org.apach ...
- 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器
首先是用于显示分词信息的HelloCustomAnalyzer.java package com.jadyer.lucene; import java.io.IOException; import j ...
- 【Lucene3.6.2入门系列】第03节_简述Lucene中常见的搜索功能
package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleD ...
- GEF入门实例_总结_04_Eclipse插件启动流程分析
一.前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件. 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们 ...
- 使用Java管理千台规模Linux服务器_入门
http://www.oschina.net/code/snippet_222919_11734 代码分享 当前位置: 代码分享 » Java » 网络编程 搜 索 [饶过] 使用Java管理千 ...
- [转载]WCF系列_分布式事务(下)
浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下. 1. WCF分布式事务例子这里也用转账的例子说事.用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...
- ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区
原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...
随机推荐
- 指令——cd
一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. 命令:#cd (change director ...
- Hash!
Panda一个字符串是否是另一个字符串的子串 #include<bits/stdc++.h> using namespace std; const int mod=998244353,tt ...
- cf 500 D. New Year Santa Network
直接按边分,2个点在边的一边,1个在另一边,组合出来就是这个边对答案的贡献,权值换了就再重新算个数而已. #include <bits/stdc++.h> #define LL long ...
- bzoj 2281: [Sdoi2011]黑白棋
再次,,,,,虚(一开始看错题了,看成一次移动一个棋子,能移动1-d个格子...这样的话有没有大神会做??本蒟蒻就教) 额,,直接%%%%把...http://hzwer.com/5760.html ...
- python 编写程序输出50以内勾股数,如下图所示,要求每组显示六祖,各组勾股数无重复
import math n = 0 for a in range(1,49): for b in range(a,49): c = math.ceil(math.sqrt(a**2+b**2)) if ...
- Typecho博客添加版权说明
版权声明是指作品权利人对自己创作作品的权利的一种口头或书面声明,一般版权声明应该包括权利归属.作品使用准许方式.责任追究等方面的内容.诸如平时看文章时最后会有一个严禁转载的说明,其实这就是版权声明. ...
- 如何通过 Python 和 OpenCV 实现目标数量监控?
今天我们将利用python+OpenCV实现对视频中物体数量的监控,达到视频监控的效果,比如洗煤厂的监控水龙头的水柱颜色,当水柱为黑色的超过了一半,那么将说明过滤网发生了故障.当然不仅如此,我们看的是 ...
- [题解] LuoguP4609 [FJOI2016]建筑师
传送门 首先对于高度为\(n\)的建筑,他的左边有\(A-1\)个建筑能被看到,右边有\(B-1\)个建筑能被看到,这两者类似,所以先来看左边. 一个建筑将会遮挡住它后面的高度比它矮的建筑,直到一个高 ...
- python --- 对于需要关联的接口处理方法
1.unittest对于需要关联的请求,怎么处理(如购物接口,需要先登录) a)把登录请求写到测试用例类的setUP函数中,这样每次调用测试用例,都会先执行setUP函数 b)全局变量的形式声明. c ...
- Java 第一次课堂测试总结。
Java 第一次课堂测试总结. 昨天参加了JAVA的开学测试,课上没有完成计算基点的功能,以下是修改完成后的代码. 首先是ScoreInformation类来存储学生信息. //信1805-1 王正 ...