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

    ---

  • 相关阅读:
    安卓使用socket建立通信客户端不显示数据
    使用bmob后端云中listview如何实现数据显示在第一个item
    安卓如何实现点击一个按钮退出整个程序?
    Python安装与准备
    敏感度——区分平庸和伟大
    fragment中设置点击事件(onclick)使用intent进行通信
    listview的几种简单用法
    Android开发现在是不是该学?
    数据包重放
    Sql注入一种dump所有数据的方法
  • 原文地址:https://www.cnblogs.com/lanyubaicl/p/11090348.html
Copyright © 2011-2022 走看看