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

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

记录数据库的网课学习

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值