SQL Server触发器的使用

谁借莪1个温暖的怀抱¢ 2024-04-06 12:58 120阅读 0赞

基本概念

触发器(trigger)是个特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,比如当对一个表进行操作( insert,delete, update)时就会激活它执行。触发器经常用于加强数据的完整性约束和业务规则等。 触发器可以从 DBA_TRIGGERS ,USER_TRIGGERS 数据字典中查到。


























表操作 Insert表 Delete表
添加记录(insert) 存放添加的记录
修改记录(update) 存放更新后的记录 存放更新前的记录
删除记录(delete) 存放被删除的记录

fd2d864def7d4985ac1b8c59a709c265.png

创建触发器

  1. create trigger trigger_name on table_name
  2. for insert --updatedelete
  3. as
  4. --业务逻辑代码

测试数据

创建两张表,学生表(student)、年级表(grade),并插入数据

  1. --学生表
  2. if(exists (select * from sys.objects where name = 'student'))
  3. drop table student
  4. go
  5. create table student
  6. (
  7. id int primary key identity(1001,1),
  8. stu_name varchar(10)--学生姓名
  9. )
  10. --年级表
  11. if(exists (select * from sys.objects where name = 'grade'))
  12. drop table grade
  13. go
  14. create table grade
  15. (
  16. id int primary key identity(1,1),
  17. s_id int not null,--学生id
  18. g_name varchar(10),--年级
  19. start_time time,--注册时间
  20. )
  21. --插入数据
  22. insert into student
  23. values('张三'),('李四'),('王五')
  24. insert into grade
  25. values(1001,'一年级',GETDATE()),
  26. (1002,'二年级',GETDATE()),
  27. (1003,'三年级',GETDATE())

Insert触发器

向学生表中添加学生信息,年级表中自动添加这位学生对应的信息,此时可以使用Insert触发器,代码如下:

  1. if(exists(select * from sys.objects where name = 'trigger_insert'))
  2. drop trigger trigger_insert
  3. go
  4. create trigger trigger_insert on student
  5. for insert
  6. as
  7. declare @stu_name varchar(10)
  8. select @stu_name = stu_name from inserted
  9. insert into grade
  10. values((select id from student where stu_name = @stu_name),'一年级',GETDATE())
  11. print '学生信息录入成功'
  12. --对表进行操作时,激活触发器
  13. insert into student values('孙悟空')

Update触发器

修改学生表中学生信息,年级表注册时间更新,此时可以使用Update触发器,代码如下:

  1. if(exists(select * from sys.objects where name = 'trigger_update'))
  2. drop trigger trigger_update
  3. go
  4. create trigger trigger_update on student
  5. for update
  6. as
  7. declare @stu_id int
  8. select @stu_id = id from deleted
  9. update grade set start_time = GETDATE()
  10. where s_id = @stu_id
  11. print '学生信息更新成功'
  12. --对表进行操作时,激活触发器
  13. update student set stu_name = '孙猴子' where id = 1004

Delete触发器

学生表中学生信息删除,年级表中该学生的年级信息自动删除,此时可以使用Delete触发器,代码如下:

  1. if(exists(select * from sys.objects where name = 'trigger_delete'))
  2. drop trigger trigger_delete
  3. go
  4. create trigger trigger_delete on student
  5. for delete
  6. as
  7. declare @stu_id int
  8. select @stu_id = id from deleted
  9. delete grade where s_id = @stu_id
  10. print '学生信息已删除'
  11. --对表进行操作时,激活触发器
  12. delete student where id = 1004

发表评论

表情:
评论列表 (有 0 条评论,120人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SQL Server 触发器

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 Ø 什么是触发器

    相关 SQL Server触发器

    简单介绍:     触发器其实是一种特殊的存储过程,它只有在特定的事件发生时自动执行。存储过程和触发器都是SQL语句和流程控制语句的集合,存储过程通过存储过程的名字被直接

    相关 sql server 触发器详解

    触发器: 概念: 触发器是一个在修改制定表中的数据时执行的存储过程,它的执行不由程序调用也不是手工启动, 触发器主要通过事件进行触发而被执行 触发器和存储过程的

    相关 SQL Server触发器

    SQL Server触发器是特殊的[存储过程][Link 1],它们会自动执行以响应数据库对象,数据库和服务器事件。 SQL Server提供三种类型的触发器: 数据操

    相关 SQL Server 触发器

    触发器是一种特殊类型的存储过程,它不同于之前的我们介绍的存储过程。触发器主要是通过事件进行触发被自动调用执行的。而存储过程可以通过存储过程的名称被调用。 Ø 什么是触发器