数据库之触发器

数据库之触发器

1.概述
触发器是特殊的存储过程。存储过程是由用户主动去调用执行,触发器是数据库在发生一些事件的时候主动调用。

常见的触发器(SQL Server)有instead of 和 after(for)
  • instead of 触发器代替用于触发触发器的sql语句。它可以用于表或者视图。

  • after(for)触发器则是在数据库update、insert、deleted之后执行。它只可以用于表

数据库为触发器特别的建立两张表 inserted表、deleted表

这两张表由数据库维护,存在内存中,它的字段与要操作的表一致。当触发器执行完之后,这两张表也会被销毁。

  • inserted表是在数据库insert或者update的时候生成,用于存放向表中插入的所有行。
  • deleted 表是在数据库deleted或者update的时候生成,用于存放从表中删除的所有行。

2、触发器过程

  • 插入操作过程:在插入表的同时,将插入的内容放入instead表。
  • 删除操作过程:将原表删除的内容放入deleted表。
  • 更新操作过程:先将要更新的内容放入deleted表中,然后将更新的内容分别放入原表和inserted表。

3.实现语法

create trigger 名字   on 操作表

  for|after    or     instead of

  update|insert|delete

  as

  SQL语句

例子(SQL Server)
插入学生信息到学生表。inserted of触发器 查询inserted表

create trigger test_trigger on student
instead of insert as
select * from inserted

go

insert student(SNO,SNAME,SEX,AGE,DNO) values('20000010','李四','男','20','0001')

go

select * from student where SNO='20000010'

数据并没有插入到student表。inserted表是要插入的内容。
在这里插入图片描述
删除学生信息时触发器更改学生的年龄并查询deleted表

create trigger sd
on student 
instead of delete as
begin
	update student set AGE=AGE+1 where SNO=(select SNO from deleted)
	select * from deleted
end

go

delete student where SNO='20000013'
select * from student where SNO='20000013'

数据并没有被删除而是年龄加1
在这里插入图片描述
删除触发器

drop trigger 触发器名字

4.总结

触发器是事件(update、deleted、inserte)发生的时候自动执行。inserted表、deleted表相当于存储中间的值,可以像一般表一样查询。
触发器可以禁止删除、插入、更新,也可以完成删除、插入、更新之后的操作。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值