SQL触发器

 

触发器是数据库服务器中发生事件时自动执行的一种特殊的存储过程。

 

T-SQL中引发事件的语句主要是DMLDDL语句。

 

 

  1. DML主要包含 INSERTUPDATEDELETE等语句。根据触发器执行与触发事件发生的先后关系,又可将DML触发器分为AFTER触发器和INSTEAD OF 触发器。

  2. DDL触发器语句包含 CREATEARTERDROPGRANTDENYREVOKEUPDATE等语句。DML不同的是,DDL触发器的触发事件是执行DDL语句而引起的事件,这种触发器是在触发事件发生后执行的,因而它不能作为INSTEAD OF触发器使用。另外,DDL触发器的作用域不是架构,因而不能使用OBJECT_ID来查询有关DDL触发器的元数据。


    下面记录一些简单的DML触发器demo:


    INSERT(AFTER)

    create trigger mytrigger1
    on student
    after insert
    as
    select * from inserted  --从临时表INSTEAD获取插入的数据  


    DELETE(AFTER)
    create trigger mytrigger2
    on student
    after delete
    as
    begin
    delete from sc where s_no in(
    select s_no
    from deleted       
     --从临时表DELETED中获取学号
    );
    end
     

    复合的触发器

     

    create trigger mytrigger3
    on student 
    after insert,update
    as
    raiserror('已有人向表student中添加或修改数据!',16,10)
     

     


    INSERT(INSTEAD OF)

     

    create trigger mytrigger4
    on student 
    instead of insert
    as
    select * from inserted
    --insert(instead of)触发器执行时将产生临时表INSERTED,
    --用于保存执行insert语句时插入的记录。
    --但insert语句不会影响到基表,仅仅是插入的记录被复制到临时表inserted中
     

     


    UPDATE(INSTEAD OF)

     

    create trigger mytrigger5
    on student
    instead of update
    as
    select * from inserted
    select * from deleted
    --update(instead of)触发器执行时将产生2个临时表:
    --表 inserted和deleted。
    --表inserted用于保存update语句更新后的新记录,
    --表deleted保存update语句更新前的旧记录
    --同样,update语句不会影响到基表
     

     


    关键是要知道增删改中数据库创建了哪些临时表来保存数据,这些数据会不会写到基表中。


你可能感兴趣的:(sql)