SQL Server触发器的使用
基本概念
触发器(trigger)是个特殊的,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 中查到。
创建触发器
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
下一篇:
解决Redis启动:未找到命令的问题