SQL server触发器的基本理解及其部分用法举例

什么是触发器?

触发器是一个特殊的存储过程,主要是通过事件来触发执行。
从简要的概述我们有以下问题值得深思:
什么是存储过程?
存储过程是一个预编译的SQL语句,只需创建一次,以后在程序中就可以调用多次。
特殊在哪里?
通过事件来触发执行,它可以强化约束,来维护数据的完整性和一致性,可以跟踪数据库内的操作从而不允许未经许可的更新和变化,也可以进行联级操作。
所以通过以上概述可知:
触发器与存储过程概念上有类似之处,但触发器比存储过程的优势在于,它能被事件自动触发,触发引起的事件也是为了维护表结构的完整性和一致性,是规范数据结构操作的一种。

触发器常用的分类有哪些?

根据造作数据库结构类型来分有两类:
DML触发器:当数据库中发生数据操作,使用DML语言时将调用DML触发器,DML事件包括对表或视图的增删改,因而DML触发器也可以分为三种类型:INSERT触发器、UPDATE触发器和DELETE触发器。
DDL触发器:当数据库使用DDL语言对数据库表结构进增删改时,触发器就会被触发。但其目的主要是为了执行对数据库的管理操作。

根据触发的先后顺序也可分为两类:
AFTER触发器:在sql相关语句命令执行之后才被调用的触发器。

INSTEAD OF触发器:在sql相关语句命令执行之前就被调用的触发器。
相关语法创建语法区别以加粗如下:

CREATE TRIGGER trigger_name --触发器名称

ON table_nqame --触发的表

[AFTER/INSTEAD OF] --触发的时间

(FOR) [DELETE, INSERT, UPDATE] --选择触发器类型

AS --触发后要做的语句
T-SQL语句
GO --结束标记

对此上两个触发器举例:

在数据库创建数据库然后创建两表

Books表

字段 字段含义 字段类型
ID 书籍编号,自增 int
Name 书名 nvarchar(50)
TypeID 书籍类型ID int

BookTypes表

字段 字段含义 字段类型
ID 类型编号,自增 int
Name 类型名 nvarchar(50)
Nums 该类型下书籍数量 int

练习AFTER触发器

after触发器是在对表进行操作之后触发的。创建新增触发器语句

需求:在新增书籍的时候,对应的类型表数据要更新

--创建触发器语法
--create trigger 触发器名称
-- on 表名
-- for 操作
--as 需要执行的sql语句
create trigger tgr_bookInsert
on Books
for insert
as 
    --定义变量,存储新增书籍的类型ID
    declare @typeID int
	--定义变量存储书籍类型的数量
	declare @typeNums int
	--找到存储新增书籍的类型ID
	select @typeID=typeID from inserted
	--计算出对应书籍类型的数量
	select @typeNums=count(*) from Books where typeID=@typeID
	--更新BookTypes表
	update BookTypes set Nums=@typeNums

手动新增一个书籍分类,并且Nums为0,然后新增一本书,这个时候书籍分类的数量就会自动更新

练习INSTEAD OF触发器

instead of是在对表操作之前触发的。

模拟需求:删除BookTypes表其Books表的对应的书籍类型也要删除

创建触发器

create trigger tgr_deleteBookType
on BookTypes
instead of delete
as
	--定义变量,存储删除类型ID
    declare @typeID int
	select @typeID = id from deleted
	--删除类型之前删除对应的书籍
	delete from Books where TypeID=@typeID
	--删除书籍后再删除类型
	delete from BookTypes where id=@typeID

执行sql语句删除我们刚刚新增的书籍类型及书籍

delete from BookTypes where id=4

结果是对应的书籍类型记录已被删除,书籍类型下的书籍也被删除了。

猜你喜欢

转载自blog.csdn.net/weixin_46839702/article/details/106238775