何以删除有主外键关系的数码吧,使用SQL触发器

2019-12-09 16:19 来源:未知

举个例证,比如二个音讯公布系统,有体系表,新闻表和评价表,分别设立主外键关系。

SQL触发器:当改换(增、删、改)数据表的记录时,绑定在SQL语句(增、删、改)中的触发器能够接触有个别事件恐怕函数,所以大家得以在触发器中编辑一些拍卖语句。

如图:

例如,当我们删除音信类别的时候,由于外键的来由,我们不可能删除新闻系列下有音信内容的记录,不过透过触发器,大家就足以兑现。

图片 1

delete from category where id=5  --sql删除语句

 

create trigger trigcategorydelete  --当执行sql删除语句时,实施触发器

 

on category

 那怎么删除连串表中的国际音讯是,连同其下的音信表和商酌表也一块儿删除呢?

after delete

三种方法,第豆蔻梢头种很简短,当在创设主外键时,如图所示:

as

图片 2

begin

 把删除准绳设为层叠(SQL2005),在SQL二零零六中又称为级联了!

delete news where caId=(select id from deleted卡塔尔--删除相应消息类其余音信内容

系列表和音讯表,新闻表和钻探表都要设为层叠。

end

第三种正是写触发器了!

照日常的思忖,那样就足以同有的时候间删除新闻类别和其下的情报内容,然而如此施行却不成事。是因为根本字AFTEEnclave,AFTE福睿斯表示在实践SQL删除语句后,再实践触发器里的讲话。这样一来,顺序相近是先删除音讯再删除音信内容,确定不成功。

那是体系表的触发器:

变动关键字after为instead of

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go

-- =============================================
-- Author:        <zxj>
-- Create date: <2012>
-- Description:    <删除类触发器>
-- =============================================
ALTER TRIGGER [trigCategoryDelete] 
   ON [dbo].[cateGory] 
   instead of DELETE
AS 
BEGIN
    --select * from deleted
    declare @caid int
    select @caid=id from deleted
    --delete news where caId=(select id from deleted)


--select * from comment where newsid in(select id from news where caid=@caid)
--删除评论
    delete comment where newsID in (select Id from news where caid=@caid)
--删除新闻
    delete news where caId=@caid
--删除类别
    delete category where id=@caid
END

instead of,表示替代delete操作,而从未真的delete from category where id=5,当category表的删除时,同一时候触发了trigcategorydelete触发器,可是出于有instead of关键字,所以笔者并不推行删除操作,而是举行触发器里的sql语句,进而得以代替以前的SQL语句。比方:

 

create trigger trigcategorydelete

 

on category

 

instead of delete

as

begin

declare @id int  --定义二个变量id

select @id=id from deleted  --从deleted有的时候表中,赋值id给变量@id

delete news where caId=@id  --先删除该类别下的具有消息

delete category where id=@id  --然后去除新闻种类 

end

当大家试行 delete from category where id=5时,id=5的品种并不曾真正删除,而是转而实施触发器里面包车型地铁SQL语句

关于deleted表:

Deleted表用于存储 DELETE 和 UPDATE 语句所影响的行的别本。在施行 DELETE 或 UPDATE语句时,行从触发器表中删除,并传导到deleted表中。Deleted表和触发器表平时未有相近的行。(//最后一句不是怎么驾驭啊?) by google

去除一条记下时候,他会把删除的那条记下放在一张不常表里,当你对category表举行删除时,在SQL再次回到的结果新闻里面会唤起出你剔除的记录。

TAG标签:
版权声明:本文由澳门mgm官网发布于新闻,转载请注明出处:何以删除有主外键关系的数码吧,使用SQL触发器