基本概念
触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。
表操作 | Insert表 | Delete表 |
---|---|---|
添加记录(insert) | 存放添加的记录 | 无 |
修改记录(update) | 存放更新后的记录 | 存放更新前的记录 |
删除记录(delete) | 无 | 存放被删除的记录 |
创建触发器
复制代码
1
2
3
4
5create trigger trigger_name on table_name for insert --update、delete as --业务逻辑代码
测试数据
创建两张表,学生表(student)、年级表(grade),并插入数据
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30--学生表 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触发器,代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15if(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触发器,代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15if(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触发器,代码如下:
复制代码
1
2
3
4
5
6
7
8
9
10
11
12
13
14if(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内容请搜索靠谱客的其他文章。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复