数据库触发器

触发器

触发器的种类

触发器的种类:2(事前,事后)*3(添加,更新,删除)=6种

事前:for(类似于before)/instead of(表存涉及外键instead of)
事后:after

创建触发器

(1)INSERT触发器
eg:使用create trigger命令建立名为“成绩tri_insert”的触发器,该触发器用于判断要插入的记录,“分数”一项必须是0-100之间的数字,否则不允许插入数据,写出程序代码。

use student 
if exists(select * from sysobjects where name='成绩tri_insert' and type='TR')
	drop trigger 成绩tri_insert
go
create trigger 成绩tri_insert
on 学生成绩
for insert
as 
	if((select 分数 from inserted)between 0 and 100)
		print '插入成功'
	else 
	begin
		print'分数格式错误,插入失败'
		rollback
	end
go
insert into 学生成绩 values('123123','007',123)
go

(2)UPDATE触发器

use student
go 
create trigger s_i_u
on s
for
insert,update
as
print '对 s表进行了数据的插入和修改'
go
--触发过程
use chaxun
go 
update s
set birthdate='1996-12-24'

where sno ='S2'
go

(3)DEELETE 触发器
eg:删除表S表学号为S7的元组前,必须先删除SC表中有外键联系的元组

use student
go 
creat trigger s_del
on s
instead of delete 
as 
delete from sc where sc.sno in
							(select sno from deleted)
return

eg:不允许删除修改数据库的触发器

--不允许删除修改数据库的触发器
use student
go 
create trigger ddl_tabletrigger
on database
for drop_table,alter_table
as
print '对不起,不能对数据表进行删除或修改操作,请联系DBA'
rollback
go
--测试删除表
use chaxun
go 
drop table sc

--不允许创建数据库的触发器

use student
go 
if exists(select * from sys.server_triggers
	where name ='ddl-trig_dtabase')
	drop trigger ddl_trig_dtabase
	on all server ;
	go
	create trigger trig_dtabase
	on all server 
	for create_database
	as 
	print '对不起,不允许创建数据库。'
	rollback
	go
	--测试创建数据库
	use chaxun
	go 
	create database test

eg:在“学生信息”表中,建立名为“学生信息tri_delete”的触发器,当删除“学生信息”表中某条记录的同时,删除“学生成绩”表中与该记录“学号”相同的所有记录。

use student 
if exists(select * from sysobjects where name='学生信息tri_delete' and type='TR')
	drop trigger 学生信息tri_delete
go
create trigger 学生信息tri_delete
on 学生信息 after delete 
as
	delete from 学生成绩
	where 学号 in(select 学号 from deleted)
go
delete 学生信息 where 学号='9056213'

eg:在“课程”表中,建立名为“课程tri_delete”的触发器,当删除“课程”表中某条记录的同时,删除“学生成绩”表中与该记录“课程号”相同的所有记录。

use student 
if exists(select * from sysobjects where name='课程tri_delete' and type='TR')
	drop trigger 课程tri_delete
go
create trigger 课程tri_delete
on 课程 after delete 
as
	delete from 学生成绩
	where 课程号 in(select 课程号 from deleted)
go
delete 课程 where 课程号='0000007'

管理触发器

(1)查看触发器信息
execsp_helptext 触发器名称
execsp_help 触发器名称

(2)修改触发器
alter trigger 触发器名
on 表名

重写触发器

(3)删除触发器
drop tigger 触发器名

(4)禁用与启用触发器

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

编程猴

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值