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

    ---

  • 相关阅读:
    Django之模板
    Web框架的原理
    mysql 索引
    pymysql模块的使用
    MySQl创建用户和授权
    php去除h5标签
    phpcms_完整版
    快速上手Linux 玩转典型应用_慕课网笔记
    php 微擎
    二维码接口
  • 原文地址:https://www.cnblogs.com/lanyubaicl/p/11090348.html
Copyright © 2011-2022 走看看