您的位置:首页 > 数据库

牛腩新闻发布系统笔记6:SQL触发器:实现数据的联动删除

2011-08-27 08:30 447 查看
当执行了SQL语句后,自动触发被执行表的触发器,我们可以在这个触发器中添加一些操作,从而实现执行了SQL语句后触发这些操作的目的。创建触发器:
CREATE TRIGGER trigCategoryDAO//触发器名称
ON category//触发器作用域
AFTER DELETE//触发器被DELETE操作触发,就是说,当执行结束DELETE操作后,触发器被触发
AS
BEGIN
select * from deleted//触发器执行的具体操作
END
GO
触发器有个临时表deleted:在触发器中添加代码:BEGINselect * from deletedEND当执行删除SQL语句后,那么触发器会把删除后的的数据暂时存储在临时表deleted中。实现类别表和新闻表的联动删除  :
执行SQL语句:
delete category where id=5

执行触发器:
ALTER TRIGGER [trigCategoryDAO]
   ON [dbo].[category]
   instead of DELETE//当执行DELETE语句的时候,不执行DELETE语句,转而执行触发器的内容
AS
BEGIN
declare @id int
select @id=id from deleted//获取delete语句中的id值
//先删除和类别id对应的新闻表
delete news where caId=@id
//然后再删除类别
delete category where id=@id
END
三级联动删除(当删除类别的时候,同时删除和类别包含的新闻以及新闻包含的评论):ALTER TRIGGER [trigCategoryDAO]ON [dbo].[category]instead of DELETEASBEGINdeclare @caId intselect @caId=id from deleted--删除评论delete comment where newsId in (select newsId from news where caId=@caId)//注意,这里用in,因为一个新闻的newsId 可能包含很多评论--删除新闻delete news where caId=@caId--删除类别delete category where id=@caIdEND

                                            
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  sql delete 存储