触发器--再次出发

关于触发器其实在机房重构中我们就已经涉及到了,有的用的是触发器有的使用存储过程。现在在牛腩中我们又遇到了使用触发器。让我们再次出发看看究竟怎么使用。

在牛腩视频中要实现对删除类别的操作,我们使用一般的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
BEGIN
	declare @caId int
	select @caId=id from deleted
	--删除评论
	delete comment where newsId in(select newsId from news where [email protected] )
	--删除新闻
	delete news where [email protected]
	--删除类别
	delete category where [email protected]

END</span>

小结:使用 DML触发器可通过数据库中的相关表实现级联更改,通过级联引用完整性约束可以更有效地执行这些更改。触发器与存储过程的唯一区别是触发器不能执行EXECUTE语句调用,而是在用户执行Transact-SQL语句时自动触发执行。

时间: 2024-08-29 03:56:03

触发器--再次出发的相关文章

14第十四章触发器(转载)

14第十四章触发器 DML --> AFTER / FOR   UPDATE , INSERT , DELETE  -- 用来级联删除 --> INSTEAD OF  在 时间之前触发,相当于 bef INSERTED, DELETED 两张表要好好利用. 在创建 DML 触发器时,不能使用下列语句: CREATE / ALTER /DROP DATABASE LOAD DATABASE / LOAD LOG / RECONFIGURE RESTORE DATABASE  / RESTORE

SQLServer 触发器入门

阅读目录 一:触发器的优点 二:触发器的作用 三:触发器的分类 四:触发器的工作原理 五:创建触发器 六:管理触发器 概念:   触发器(trigger)是SQL server 提供给程序员和数据分析员来保证数据完整性的一种方法,它是与表事件相关的特殊的存储过程,它的执行不是由程序调用,也不是手工启动,而是由事件来触发,当对一个表进行操作( insert,delete, update)时就会激活它执行.触发器经常用于加强数据的完整性约束和业务规则等. 触发器可以从 DBA_TRIGGERS ,U

Oracle DBA面试突击题

一份ORACLE DBA面试题 一:SQL tuning 类 1:列举几种表连接方式 答:Oracle的多表连接算法有Nest Loop.Sort Merge和Hash Join三大类,每一类又可以分为三小类. 以Nest Loop为例: 传统的Nest Loop连接: 针对In.Exists优化的Semi Nest Loop: 专门针对Not In.Not Exists优化的Anti Nest Loop. Semi/Anti *** Join这几种也叫半连接. (可以补充一下这三个连接的不同之

多路复用I/O epoll()

epoll 是Linux内核中的一种可扩展IO事件处理机制,最早在 Linux 2.5.44内核中引入,可被用于代替POSIX select 和 poll 系统调用,并且在具有大量应用程序请求时能够获得较好的性能( 此时被监视的文件描述符数目非常大,与旧的 select 和 poll 系统调用完成操作所需 O(n) 不同, epoll能在O(1)时间内完成操作,所以性能相当高),epoll 与 FreeBSD的kqueue类似,都向用户空间提供了自己的文件描述符来进行操作. int epoll_

徒步马啣山

国庆过去了一半,想想真是疯狂. 对于马啣山,我的内心是向往的,我向往她的海拔,向往她屹立于黄土高原上的那一片绿,向往山顶那平坦的草原那被冰川侵蚀的地貌. 于是,我决定,再次出发. 马啣山,我已是第三次去了,第一次是五一的时候,我独自去的.当时山顶还有积雪,为了走小路我差点陷入荆棘(沙棘)丛中.当时山上的灌木刚发芽,积雪让地面变得泥泞,我入无头苍蝇一样在山中乱窜,最后我记得是沿着牛羊走过的小径(如果说算小径的话)下山的,然后老老实实走的大路. 第二次是去年9月初的时候,8月是线叶龙胆的季节 [ht

epoll的两种触发模式

epoll有两种模式,Edge Triggered(简称ET) 和 Level Triggered(简称LT).在采用这两种模式时要注意的是,如果采用ET模式,那么仅当状态发生变化时才会通知,而采用LT模式类似于原来的select/poll操作,只要还有没有处理的事件就会一直通知. 以代码来说明问题: 首先给出server的代码,需要说明的是每次accept的连接,加入可读集的时候采用的都是ET模式,而且接收缓冲区是5字节的,也就是每次只接收5字节的数据: Java代码   #include <

select, poll, epoll区别详解(一)

1 select函数 int select(int nfds, fd_set *readfds, fd_set *writefds, fd_set *exceptfds, struct timeval *timeout); 1.1 参数说明 第一个参数nfds为fdset集合中最大描述符值加1,fdset是一个位数组,其大小限制为__FD_SETSIZE(1024),位数组的每一位代表其对应的描述符是否需要被检查. 第二三四个参数表示需要关注读.写.错误事件的文件描述符位数组,这些参数既是输入参

放风筝(二)

第一次放风筝以失败结束,今天再次出发,借着好天带儿子多参与户外活动,这次买的是一个猴王造型的,大大的脑袋,长长的尾巴很可爱.在昨天积累一些经验后,今天有了一些感觉,只要找对风的方向,不用太费劲就能放上去,相比昨天的一路狂奔有了很大的进步. 今天我们来到湖边,宽广的湖面,空阔的观景台上,用手托着风筝,迎着风放手风筝起飞,慢慢放长手中的线,风筝一路高飞,在这块的风力比广场更适合放风筝,风筝越飞越高,吸引不少小朋友前来围观,有人拍照,有人合影,一只俏皮可爱的猴子风筝在空中越飞越高,手中能明显感觉到一股

在你决定从事iOS开发前需要清楚的几个问题

作者:David McGraw  翻译:丁丁(jackiehoo) 原文:http://www.xmcgraw.com/what-you-need-to-know-to-start-learning-how-to-code/ 译者注:这篇文章是我在一个月前看到的,文章的内容基本表达我转行从事iOS开发时候的思考.觉得这篇文章会对那些想做iOS开发和刚开始做的朋友有一些帮助,因此翻译出来并分享给大家,对我而言则温故知新.不忘初心,方得始终,新的一年再次出发. 每个人的都有独特的经历,因此会有特别的