前言
之前听小伙伴说过触发器,这次敲牛腩新闻发布系统,就学到了触发器。
正文
在新闻发布系统中,需要删除新闻时同时将评论删除,同时将此此类别删除。这时候用到了触发器。所有顾名思义,触发器就是因为某一个事件而出发了一系列得事件。
- 添加触发器步骤
在需要添加触发器得表中添加触发器
USE [news System]
GO
/****** Object: Trigger [dbo].[trigCategoryDelete] Script Date: 2018/12/5 11:03:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
-- =============================================
-- Author: Winni
-- Create date: 2018.12.05
-- Description: 删除类别触发器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]
ON [dbo].[category]
instead of DELETE
AS
BEGIN
--定义变量
declare @caid int
select @caid =id from deleted
--删除评论
delete Comment where newsId =(select newsId from news where caId =@caid )
--删除新闻
delete news where caid =@caid
--删除类别
delete category where id =@caid
END
- 触发器的优点:
触发器可通过数据库中的相关表实现级联更改,不过,通过级联引用完整性约束可以更有效地执行这些更改。
一个表中的多个同类触发器(INSERT、UPDATE 或 DELETE)允许采取多个不同的对策以响应同一个修改语句。
- 触发器要慎用
触发器很方便,但是为什么要慎用呢?
触发器本身没有过错,但由于我们的滥用会造成数据库及应用程序的维护困难。在数据库操作中,我们可以通过关系、触发器、存储过程、应用程序等来实现数据操作…… 同时规则、约束、缺省值也是保证数据完整性的重要保障。如果我们对触发器过分的依赖,势必影响数据库的结构,同时增加了维护的复杂程度。
这个我在敲牛腩的时候就遇到了难以维护的问题。因为一开始数据库没有设置主键自增,所有很多增加的新闻都没有ID,后来子颍告诉我可以自增,我就打算把我的category都删掉,但是一删就触发了“触发器”,就删不了了,但是真的是很苦恼啊,最后决定把触发器先删掉,再去删我的表,所以维护真的是挺麻烦的。
但是这次了解了触发器真的是挺好的,学到了知识可以不用,但是了解一下还是好的。