SQL Server触发器的使用

基本概念

触发器(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
经验分享 程序员 微信小程序 职场和发展