简介
当触发某个事件时,如果满足给定条件,则执行相应的动作
语法
CREATE TRIGGER trigger_name ON table_name AFTER | INSTEAD OF | FOR INSERT | DELETE | UPDATE AS sql_ment
分类
SQL Server 支持两种类型的触发器AFTER 触发器和INSTEAD OF 触发器
INSTEAD OF触发器:表示不执行所定义的操作insert/delete/update,而是执行触发器本身,可以在表上或者视图定义INSTEAD OF触发器
AFTER触发器:也叫FOR触发器,会在DML语句(insert/delete/update)执行完之后才开始执行
另外,创建触发器的时候,系统都会自动生成两张表,INSERTED(插入表)和DELETED(删除表),这两个表都是逻辑表,只读不能修改,因为是存在内存中而不是存在数据库中。这两个表主要是保存因用户操作而被影响到的原数值或者新数值
实例
判断触发器是否已经存在,假如存在则删除,不存在则创建。触发器功能:每次向student表插入数据,则更新class表中的num,每次只能插入一条数据。
IF (OBJECT_ID('stu_insert','TR')IS NOT NULL)
BEGIN
DROP TRIGGER stu_insert
END
ELSE
BEGIN
CREATE TRIGGER stu_insert ON student AFTER INSERT
AS
BEGIN
IF @@ROWCOUNT >1
BEGIN
RAISE_ERROR('THE ISNERT ROWCOUNT MORE THEN NORMAL!',16,1)
ROLLBACK TRANSACTION
RETURN
END
ELSE
BEGIN
UPDATE class SET num = num + 1
WHERE id = (SELECT ID FROM INSERTED)
END
END
END
GO