概述
基本概念
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
表操作 | Insert表 | Delete表 |
---|---|---|
添加记录(insert) | 存放添加的记录 | 无 |
修改记录(update) | 存放更新后的记录 | 存放更新前的记录 |
删除记录(delete) | 无 | 存放被删除的记录 |
创建触发器
create trigger trigger_name on table_name
for insert --update、delete
as
--业务逻辑代码
测试数据
创建两张表,学生表(student)、年级表(grade),并插入数据
--学生表
if(exists (select * from sys.objects where name = 'student'))
drop table student
go
create table student
(
id int primary key identity(1001,1),
stu_name varchar(10)--学生姓名
)
--年级表
if(exists (select * from sys.objects where name = 'grade'))
drop table grade
go
create table grade
(
id int primary key identity(1,1),
s_id int not null,--学生id
g_name varchar(10),--年级
start_time time,--注册时间
)
--插入数据
insert into student
values('张三'),('李四'),('王五')
insert into grade
values(1001,'一年级',GETDATE()),
(1002,'二年级',GETDATE()),
(1003,'三年级',GETDATE())
Insert触发器
向学生表中添加学生信息,年级表中自动添加这位学生对应的信息,此时可以使用Insert触发器,代码如下:
if(exists(select * from sys.objects where name = 'trigger_insert'))
drop trigger trigger_insert
go
create trigger trigger_insert on student
for insert
as
declare @stu_name varchar(10)
select @stu_name = stu_name from inserted
insert into grade
values((select id from student where stu_name = @stu_name),'一年级',GETDATE())
print '学生信息录入成功'
--对表进行操作时,激活触发器
insert into student values('孙悟空')
Update触发器
修改学生表中学生信息,年级表注册时间更新,此时可以使用Update触发器,代码如下:
if(exists(select * from sys.objects where name = 'trigger_update'))
drop trigger trigger_update
go
create trigger trigger_update on student
for update
as
declare @stu_id int
select @stu_id = id from deleted
update grade set start_time = GETDATE()
where s_id = @stu_id
print '学生信息更新成功'
--对表进行操作时,激活触发器
update student set stu_name = '孙猴子' where id = 1004
Delete触发器
学生表中学生信息删除,年级表中该学生的年级信息自动删除,此时可以使用Delete触发器,代码如下:
if(exists(select * from sys.objects where name = 'trigger_delete'))
drop trigger trigger_delete
go
create trigger trigger_delete on student
for delete
as
declare @stu_id int
select @stu_id = id from deleted
delete grade where s_id = @stu_id
print '学生信息已删除'
--对表进行操作时,激活触发器
delete student where id = 1004
最后
以上就是俭朴萝莉为你收集整理的SQL Server触发器的使用的全部内容,希望文章能够帮你解决SQL Server触发器的使用所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复