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的更多相关文章

  1. Hadoop MapReduce编程 API入门系列之压缩和计数器(三十)

    不多说,直接上代码. Hadoop MapReduce编程 API入门系列之小文件合并(二十九) 生成的结果,作为输入源. 代码 package zhouls.bigdata.myMapReduce. ...

  2. Java入门系列之StringBuilder、StringBuffer(三)

    前言 上一节我们讲解了字符串的特性,除了字符串类外,还有两个我们也会经常用到的类,那就是StringBuffer和StringBuilder.因为字符串不可变,所以我们每次对字符串的修改比如通过连接c ...

  3. 【Lucene3.6.2入门系列】第04节_中文分词器

    package com.jadyer.lucene; import java.io.IOException; import java.io.StringReader; import org.apach ...

  4. 【Lucene3.6.2入门系列】第05节_自定义停用词分词器和同义词分词器

    首先是用于显示分词信息的HelloCustomAnalyzer.java package com.jadyer.lucene; import java.io.IOException; import j ...

  5. 【Lucene3.6.2入门系列】第03节_简述Lucene中常见的搜索功能

    package com.jadyer.lucene; import java.io.File; import java.io.IOException; import java.text.SimpleD ...

  6. GEF入门实例_总结_04_Eclipse插件启动流程分析

    一.前言 本文承接上一节:GEF入门实例_总结_03_显示菜单和工具栏 注意到app目录下的6个类文件. 这6个文件对RCP应用程序而言非常重要,可能我们现在对这几个文件的理解还是云里雾里,这一节我们 ...

  7. 使用Java管理千台规模Linux服务器_入门

    http://www.oschina.net/code/snippet_222919_11734 代码分享 当前位置: 代码分享 » Java  » 网络编程 搜 索   [饶过] 使用Java管理千 ...

  8. [转载]WCF系列_分布式事务(下)

    浏览到chnking的WCF的分布式事务处理不错,转载过来分享一下. 1. WCF分布式事务例子这里也用转账的例子说事.用户在系统A和系统B都有账户,账户间的资金可以互转,系统A的资金减少多少,系统B ...

  9. ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区

    原文:ArcGIS for Desktop入门教程_第七章_使用ArcGIS进行空间分析 - ArcGIS知乎-新一代ArcGIS问答社区 1 使用ArcGIS进行空间分析 1.1 GIS分析基础 G ...

随机推荐

  1. bzoj 3522: [Poi2014]Hotel

    呵呵,一开始天真的我以为求个 西格玛 C(??,3)就好了.. (题解:比枚举2个数的再多一个,,一样搞) #include <bits/stdc++.h> #define LL long ...

  2. cf749 D. Leaving Auction

    #include<bits/stdc++.h> #define lowbit(x) x&(-x) #define LL long long #define N 200005 #de ...

  3. Python基础笔记:函数式编程:高阶函数、返回函数、匿名函数

    高阶函数 高阶函数:一个函数可以接收另一个函数作为参数 或 一个函数可以返回一个函数作为返回值,这种函数称之为高阶函数. #函数 add 接收 f 函数作为参数 >>> def ad ...

  4. Lombok认知

    Lombok的简介 Lombok是一款Java开发插件,公司项目到处使用,整体效果很棒,代码更干净.Java开发人员可以节省出重复构建,诸如hashCode和equals这样的方法以及各种业务对象模型 ...

  5. C# 读取CSV格式数据 读取为DataTable类型

    先贴代码: using System.Data;using System.Data.OleDb; static void Main(string[] args) { var strpath = Sys ...

  6. POJ 3311 Hie with the Pie 最短路+状压DP

    Hie with the Pie Time Limit: 2000MS   Memory Limit: 65536K Total Submissions: 11243   Accepted: 5963 ...

  7. linux常用命令-关机、重启

    常用命令-关机.重启 命令 含义 reboot 重新启动操作系 shutdown –r now 重新启动操作系统,shutdown会给别的用户提示 shutdown -h now 立刻关机,其中now ...

  8. 解决CGrIdCtrl合并单元格后继续拆分后的问题

    DWORD dwMergeCellCount = vMergeCells.size(); ; i < dwMergeCellCount; i++){ m_HFlexGrid.SplitCells ...

  9. hadoop yarn 实战错误汇总

    1.hadoop yarn 运行wordcount时执行完成,但是返回错误 错误信息如下: // :: INFO mapreduce.Job: Job job_1441395011668_0001 f ...

  10. java内存机制 垃圾回收

    gc机制一 1.JVM的gc概述 gc即垃圾收集机制是指jvm用于释放那些不再使用的对象所占用的内存.java语言并不要求jvm有gc,也没有规定gc如何工作.不过常用的jvm都有gc,而且大多数gc ...