zoukankan      html  css  js  c++  java
  • SQL 触发器

    触发器,是对表进行插入,更新、删除操作时自动执行的存储过程。
    通常用于强制业务规则,高级约束、可执行 if/while/case
    触发器定义在特定的表上,与表相关。
    自动触发执行,不能直接调用。
    是一个事务,可回滚,不能手动提交。

    delete 触发器 当删除表中记录时触发,自动执行触发器定义的SQL语句
    insert 触发器 当请表中插入数据时触发,自动执行触发器锁定义的SQL语句
    update触发器 当更新表中列,多列时触发,自动执行触发器所定义的SQL语句

    触发器触发时
    系统自动在内存创建deleted 表 或者 inserted表;
    只读,不允许修改;触发器执行完成后,自动删除;

    inserted:用于存储insert 和 update 语句所影响的行的副本。
    1.再执行insert或update语句时,新加行被同时添加到inserted表和触发器表中,所以inserted表临时保存了插入或者更新后的记录行。
    2.可以从inserted中检查插入的数据是否满足业务需求,如果不满足,则箱用户报告错误消息,并回滚插入操作。

    deleted表:表用于存储delete 和 update语句所影响的行的副本
    1.再执行delete或update语句时,执行触发器表中删除,并传输到deleted表中,所以deleted保存了删除或者更新前的记录行。
    2.可以冲deleted表检查被删除的数据是否满足业务需求,如果不满足,则箱用户报告错误消息,并回滚插入操作。

    语法:

    create trigger [trigger_Name]
    on [table_name]
    for [delete|insert|update] 
    as
    t-sql语句
    go

    --------------------------------

    update触发器除了跟踪数据的变化(修改)外,还可以检查是否修改了某列的数据。
    使用update(列)函数检测是否修改了某列。
    列:

    Create trigger trig_update_transInfo
    on transInfo --表名
    for update --更新,修改
    as 
    if update(transDate) --检查是否修改了交易日期列 transDate
    begin
    print '交易失败'
    end
    GO

     修改字段时,弹出异常提示,执行数据回滚

    CREATE TRIGGER trigger_temp3
    ON dbo.temp1 --表名
    FOR UPDATE --更新
    AS 
      IF UPDATE(BillAutoID) --修改的字段
      BEGIN
        RAISERROR('日期被修改',2,1); --弹出异常日志提示
        ROLLBACK TRANSACTION  --事务回滚
      END 
    go

    ---

  • 相关阅读:
    利用dockerfile定制镜像
    发布Docker 镜像到dockerhub
    Docker 停止容器
    133. Clone Graph
    132. Palindrome Partitioning II
    131. Palindrome Partitioning
    130. Surrounded Regions
    129. Sum Root to Leaf Numbers
    128. Longest Consecutive Sequence
    127. Word Ladder
  • 原文地址:https://www.cnblogs.com/lanyubaicl/p/11090348.html
Copyright © 2011-2022 走看看