本文主要是介绍触发器--再次出发,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
关于触发器其实在机房重构中我们就已经涉及到了,有的用的是触发器有的使用存储过程。现在在牛腩中我们又遇到了使用触发器。让我们再次出发看看究竟怎么使用。
在牛腩视频中要实现对删除类别的操作,我们使用一般的SQL语句去删除会出现这样的错误:
{ DELETE语句与REFERENCE约束“FK_news_category”冲突。该冲突发生于数据库“newssystem”,表“dbo.news” 语句终止;}
出现这种错误的原因就是各表直接有主键外键约束 ,如数据库关系图:
首先我们知道SQL Server 包括三种常规类型的触发器:DML 触发器、DDL 触发器和登录触发器。
要想完美删除类别表下的新闻以及评论就用到了触发器。当数据库中表中的数据发生变化时,包括insert,update,delete任意操作,我们对该表写对应的DML触发器,该触发器自动执行所以这里我们用的触发器应该叫DML触发器。
<span style="font-family:KaiTi_GB2312;">-- =============================================
-- Author: 刘伟
-- Create date: <2014-9-22 11:28
-- Description: 删除类别触发器
-- =============================================
ALTER TRIGGER [dbo].[trigCategoryDelete]ON [dbo].[category]instead of DELETE
AS
BEGINdeclare @caId intselect @caId=id from deleted--删除评论delete comment where newsId in(select newsId from news where caId=@caId )--删除新闻delete news where caId=@caId--删除类别delete category where id=@caIdEND</span>
小结:使用 DML触发器可通过数据库中的相关表实现级联更改,通过级联引用完整性约束可以更有效地执行这些更改。触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。
这篇关于触发器--再次出发的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!