MSSQL中触发器类型概述:AFTER、BEFORE以及INSTEAD OF(mssql触发器类型包括)
MSSQL中触发器类型概述:AFTER、BEFORE以及INSTEAD OF
MSSQL中触发器特性是根据Data Definition Language(DDL)或Data Manipulation Lanugage(DML)语句定义的事件进行自动响应,自动完成一个或者多个指定的任务。该特性提高了数据库的安全性,可以根据指定的时间或者特定条件来监控表的更新。MSSQL支持三种类型的触发器,分别为AFTER,BEFORE和INSTEAD OF。
1、AFTER触发器:AFTER触发器是当定义事件发生时,由Database Engine 自动执行,且只能在事件完成后才执行。AFTER触发器种类如下:
* After Insert 触发器:在新行插入之后执行
* After Update 触发器:在行更新之后执行
* After Delete 触发器:在行删除之后执行
例如:
“`sql
CREATE TRIGGER Insert_Log
ON myTable
AFTER INSERT
AS
BEGIN
INSERT INTO Log_Table (Action,UserName)
VALUES (‘Insert’,USER_NAME() )
END
2、BEFORE触发器:BEFORE触发器在事件发生之前执行,用于检验或者更改表的数据,当定义的表类型为INSERT、UPDATE或者DELETE时,BEFORE触发器都可以使用。BEFORE触发器种类如下:
* Before Insert 触发器:在新行插入之前执行* Before Update 触发器:在行更新之前执行
* Before Delete 触发器:在行删除之前执行
例如:
```sqlCREATE TRIGGER check_stock
ON productBEFORE UPDATE
ASBEGIN
IF UPDATE(stock) BEGIN
IF (SELECT stock FROM inserted) BEGIN
RAISERROR ('Stock cannot be lower than 5!', 16, 1) ROLLBACK TRANSACTION
END END
END
3、INSTEAD OF触发器:INSTEAD OF触发器可以在定义类型上支持INSERT、UPDATE、DELETE,且在数据库更新之前执行,但它不能在更新之后执行。INSTEAD OF触发器种类如下:
* Instead of Insert 触发器:在新行插入之前执行
* Instead of Update 触发器:在行更新之前执行
* Instead of Delete 触发器:在行删除之前执行
例如:
“`sql
CREATE TRIGGER Log_Action
ON Products
INSTEAD OF UPDATE
AS
BEGIN
INSERT INTO Log_Table (Action,UserName)
VALUES (‘Update’,USER_NAME() )
END
MSSQL中的触发器非常重要,它可以自动执行更新的任务,并且提升了数据库的安全性。在选择触发器类型时,使用者需要合理地结合表的类型及具体的业务逻辑来选择,以保证系统的可靠性和性能。