数据库学习笔记(1)——触发器的讲解

数据库学习笔记(1)——触发器的讲解

  • 一、触发器的定义:
  • 二、触发器的作用:
  • 三、SQL Server 有什么不同类型的触发器?
  • 四、创建与使用触发器
    • 1. 创建数据库SQL_Test数据库,创建两张表BookType表和Book表
    • 2. 创建触发器以及使用
      • 增加与修改数据
      • 删除多表数据
    • 3. 删除触发器和查看触发器

一、触发器的定义:

触发器(trigger)是由事件来触发某个操作。这些事件包括INSERT语句、UPDATE语句和DELETE语句。当数据库系统执行这些事件时,会激活促发其执行相应的操作。
触发器是一种专用类型的存储过程,它被捆绑到SQL Server 的表格或者视图上。

二、触发器的作用:

触发器是一个特殊的存储过程,主要是通过事件来触发而被执行的。
它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化。
可以级联运算。如,某表上的触发器上包含对另一个表的数据操作,而该操作又会导致该表触发器被触发。

三、SQL Server 有什么不同类型的触发器?

有INSTEAD-OF和AFTER两种触发器。
例如,如果有一个用于TableA的INSTEAD-OF-UPDATE触发器,同时对这个表格执行更新语句,
那么INSTEAD-OF-UPDATE触发器里的代码会执行,而不是执行更新语句则不会执行操作。
AFTER触发器要在DML语句在数据库里使用之后才执行。
这些类型的触发器对于监视发生在数据库表格里的数据变化十分好用。

四、创建与使用触发器

1. 创建数据库SQL_Test数据库,创建两张表BookType表和Book表

BookType表数据库学习笔记(1)——触发器的讲解_第1张图片
Book表数据库学习笔记(1)——触发器的讲解_第2张图片

2. 创建触发器以及使用

增加与修改数据

--创建触发器,当我在书籍表中添加一条记录时,触发一个事件
--这个事件将会在书籍分类表,给对应的该新增书籍的分类,库存加1
go
create trigger tri_add
on Books for insert
as
declare @typeid int
select @typeid=TypeID from inserted --系统自带的表,保存新增的数据
update BookTypes set nums=Nums+1 where ID=@typeid

insert Books values('红楼梦','经典永流传',2)
--创建触发器,当我在书籍表中删除一条记录时,触发一个事件
--这个事件将会在书籍分类表,给对应的该删除书籍的分类,库存减1
go
create trigger tri_jian
on Books for delete
as
declare @typeid int
select @typeid=TypeID from deleted --系统自带的表,保存新增的数据

update BookTypes set nums=Nums-1 where ID=@typeiddelete from Books where ID=5
--创建触发器,当我在书籍表中修改一条记录时,触发一个事件
--这个事件将会在书籍分类表,给对应的原书籍的分类库存减1,修改后的书籍的分类库存减1
go
create trigger tri_update
on Books for update
as
declare @oldtypeid int
declare @newtypeid int
select @oldtypeid=TypeID from deleted
select @newtypeid=TypeID from inserted --系统自带的表,保存修改的数据
update BookTypes set nums=Nums-1 where ID=@oldtypeid

update BookTypes set nums=Nums+1 where ID=@newtypeidupdate Books set TypeID=1 where id=1

删除多表数据

当表与表之间建了外键的情况下,想要删除父级记录的同时把子级记录一起删除
可以利用数据库的表的删除规则,设置级联

数据库学习笔记(1)——触发器的讲解_第3张图片

--创建触发器,当我在书籍分类表中删除一条记录时,触发一个事件 
--这个事件将会自动删除在该书籍分类下的所有书籍 --(数据库表的删除规则设置了级联的前提下)
go 
create trigger tri_typeDel 
on BookTypes after delete 
as
begin delete Books where ID in (select ID from deleted) end
drop trigger tri_typeDel
select * from sysobjects where xtype='TR'
delete from BookTypes where ID=5

3. 删除触发器和查看触发器

--删除触发器
drop trigger tri_typeDel
--查看触发器
select * from sysobjects where xtype='TR'

你可能感兴趣的:(SQL数据库的奥义)