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. 转载-- SQL连接查询2 外连接(左右联接查询)

    http://www.cnblogs.com/zhangqs008/archive/2010/07/02/2341196.html 外连接主要包括左连接.右连接和完整外部连接. 1)左连接:Left ...

  2. CSS层级关系 学习笔记

        CSS 文档流   格式化上下文 Formatting Context 即初始元素定义的环境 块格式化上下文  Block Formatting Context BFC 行内格式化上下文   ...

  3. 指令——free

    free指令 一个完整的指令的标准格式: Linux通用的格式——#指令主体(空格) [选项](空格) [操作对象] 一个指令可以包含多个选项,操作对象也可以是多个. free指令作用:查看内存使用情 ...

  4. 01-JAVA语言基础——课后动手动脑

    1.一个java类文件中真的只能有一个公有类吗? 请使用Eclipse或javac检测一下以下代码,有错吗? public class Test{    public static void main ...

  5. 【STM32H7教程】第51章 STM32H7的LTDC应用之LCD汉字显示和2D图形显示

    完整教程下载地址:http://www.armbbs.cn/forum.php?mod=viewthread&tid=86980 第51章       STM32H7的LTDC应用之LCD汉字 ...

  6. 124-PHP类析构函数

    <?php class myclass{ //定义一个类 public function __destruct(){ //定义析构方法 echo '析构方法执行.<br />'; } ...

  7. JAVA-数据类型-复习

    JAVA-数据类型-复习 Java中,一共有8种数据类型,4种整型,2种浮点型,1种用于表示Unicode编码的字符单元的字符类型char,1种布尔类型. 整型 类型 存储需求(字节)一个字节包含8个 ...

  8. JDBC获取数据库连接慢

    RHEL6.4 获取Oracle数据库链接时快时慢,RHEL7.3获取Oracle数据库链接时一直很慢能够达到五万毫秒. 解决方法: 修改$JAVA_HOME/jre/lib/security/jav ...

  9. Java 逆序打印链表

    递归 package cookie; public class PrintListReversal { public void reversalOut(Node head) { if (head != ...

  10. Bulma CSS框架教程

    Bulma是一个轻量级的现代CSS框架,基于flex,跟bootstrap不一样纯CSS没有JS,与vuejs.reactjs这样JavaScript框架可以很好地集成. 为降低学习难度,让初学者可以 ...