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. HDU 5495:LCS

    LCS  Accepts: 127  Submissions: 397  Time Limit: 6000/3000 MS (Java/Others)  Memory Limit: 65536/655 ...

  2. 5款国内免费CDN服务商及使用点评

    第一款,百度加速乐 加速乐目前被百度收购,这样百度也有了自己运营的CDN产品,可以丰富自身站长平台工具使用用户群.目前有免费用户和付费用户的区别,对于一般的网站免费方案也足够使用.特点具备智能解析.加 ...

  3. 13.56mhz自动寻卡功能业界最低功耗:SI522

    随着智能门锁的不断火爆,很多智能门锁产商为了让产品的功耗下降下来,都在不断寻找能自动寻卡的13.56mhz.今天我就为大家推荐一款13.56mhz芯片自动寻卡业界最低功耗,不仅是业界最低另外还完全PI ...

  4. 基于springboot实现Java阿里短信发送

    1.接口TestController import java.util.Random; import com.aliyuncs.DefaultAcsClient; import com.aliyunc ...

  5. exec()函数问题

    源代码: 在网上也搜索了答案 比较详细的答案是: <?php exec("lsof -i:80",$out,$status); 结果: var_dump($out); arr ...

  6. Golang go-gin 注册路由

    代码实现 main.go package main import ( "fmt" "github.com/jihite/go-gin-example/pkg/settin ...

  7. windows7配置C++编译环境

    将C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin添加到path后,依然不能编译: 新建INCLUDE:C:\Program Fil ...

  8. 一、thinkphp安装

    参考:https://www.kancloud.cn/manual/thinkphp5/118006 0.在此之前安装好phpstudy https://www.xp.cn 1.下载composer, ...

  9. 08 SSM整合案例(企业权限管理系统):10.权限关联与控制

    04.AdminLTE的基本介绍 05.SSM整合案例的基本介绍 06.产品操作 07.订单操作 08.权限控制 09.用户操作 10.权限关联与控制 11.AOP日志 10.权限关联与控制 1.用户 ...

  10. 高级js 变量提升以及自由变量

    Q首先一道题 if(false){ var a = 1; } console.log(a); //undefined //我以为输出ReferenceError: aa is not defined ...