SQL触发器(有同步update的例子)

触发器分为:DML触发器、DDL触发器、登录触发器

原理如表格所示

对表的操作 inserted表 deleted表
增加记录(insert) 存放增加的记录
删除记录(delete) 存放被删除的记录
修改记录(update) 存放更新后的记录 存放更新前的记录

insert:

当对表进行INSERT操作时,INSERT触发器被激发,新的数据行被添加到创建触发器的表和Inserted表。

delete:

先将要删除的记录存放在Deleted表里,然后把数据表里的记录删除,再激活After触发器,执行After触发器里的SQL语句。执行完毕之后, 删除内存中的Deleted表,操作结束。

update :

生成新的记录到Inserted表,复制旧的记录到Deleted表,然后删除修改表里的旧的记录并写入新纪录。

update例子:

创建触发器trigger_2,实现当修改“学生表”中的某个学生的学号时,对应“学生作业表”中的学号也作修改。

use study
go
create trigger trigger_2
on student
for update
as
if update(stdid)
begin
update sw
set stdid  = inserted.stdid
from sw ,deleted,inserted
where sw.stdid = deleted.stdid
end
go

查看student表的触发器

exec sp_helptrigger 'student'

查看trigger_2触发器的定义文本

EXEC sp_helptext 'trigger_2'

删除student表的trigger_2触发器

drop trigger trigger_2

修改DML触发器的语法格式如下:

ALTER TRIGGER schema_name.trigger_name
ON ( table | view )
[ WITH ENCRYPTION ]
{ FOR | AFTER | INSTEAD OF }
{ [ DELETE ] [ , ] [ INSERT ] [ , ] [ UPDATE] }
AS sql_statement [ ; ]

修改DDL触发器的语法格式如下:

ALTER TRIGGER trigger_name
ON { ALL SERVER | DATABASE }
[ WITH ENCRYPTION ]
{ FOR | AFTER } { event_type | event_group } [ ,...n ]
AS sql_statement [ ; ]

使触发器无效:

DISABLE TRIGGER { [ schema.] trigger_name [ ,...n ]
| ALL }
ON object_name

使触发器有效:

ENABLE TRIGGER {[schema_name.] trigger_name
[ ,...n ] | ALL }
ON object name

记录数据库的网课学习

(0)

相关推荐