• 牛腩新闻发布系统(1)级联表的操作



             触发器是一种特殊类型的存储过程,它不同于普通的存储过程。触发器主要是通过事件进行触发而被执行的,而存储过程可以通过存储过程名称而被直接调用。当往某一个表格中插入记录、修改记录或者删除记录时,SQL SERVER就会自动执行触发器所定义的SQL语句,以确保数据的完整性。
            很多时候我们有这样一种需求,某一分类信息是属于另一个大的分类,当需要删除大的分类时,它下面小的分类实际也应该一起删除的,而且表之间设置了主键和外键,例如有三个表示:新闻分类表、新闻表、评论表。
            它们分别为一对多的关系,如果你删除某一个新闻分类,这个分类里的新闻以及每条新闻的评论应该都删除,这三个表之间如果建立了外键,再删分类表或新闻表时就会出错,而用触发器可以很好的解决。
            
           因此,在删除新闻分类时,要先删除它下面的新闻,即新闻表中属于该分类下的记录。
           建立触发器代码如下:
           
            在触发器中需要注意代码中红色框和绿色框框中内容,红色框中可以是Instead of 或after ,分别表示UPDATE、 INSERT 、DELETE执行之前或之后触发。
            AFTER:表示只有在执行了指定的操作INSERT、DELETE、UPDATE之后触发器才被激活,执行触发器中的SQL语句。
           
            INSTEAD OF:当为表或视图定义了针对某一操作INSERT、DELETE、UPDATEINSTEAD OF类型触发器,且执行了相应的操作时,尽管触发器被触发,但相应的操作并不被执行,而运行的仅是触发器SQL语句本身。
            这句话表明如果是INSTEAD OF类型触发器,那个执行的SQL语句本身不再执行,而是只执行触发器中内容。
            如果是三个表之间级联删除和两个表之间删除类似,不同的是再删除第三表中记录时,所有的评论不会只属于一个新闻类,可以用“In”关键字,删除。如下:
           
           可能你对触发器语句中的deleted不理解,这涉及到触发器工作原理。
          
            每个触发器有两个特殊的表:插入表(inserted)和删除表(deleted)。这两个表是逻辑表,并且这两个表是由系统管理的,存储在内存中,不是存储在数据库中,因此不允许用户直接对其修改。这两个表的结构总是与被该触发器作用的表有相同的表结构。这两个表是动态驻留在内存中的,当触发器工作完成,这两个表也被删除。这两个表主要保存因用户操作而被影响到的原数据值或新数据值;另外这两个表是只读的,即用户不能向这两个表写入内容,但可以引用表中的数据。
            触发器和事件触发一样,如单击事件,它是事件触发事件,让多个有联系的业务、操作关联起来,需要根据需要灵活使用。


             
  • 相关阅读:
    ES6之主要知识点(二) 变量的解构赋值。默认值
    ES6之主要知识点(一)
    前后端通信
    js 面向对象类
    typeof 、Object.prototype.toString和 instanceof
    原型链 之 对象的创建
    Ueditor1.4.3.3+springMvc+maven 实现图片上传
    Hibernate 根据实体名称得到DB表名以及表对应的Sequence name
    第三章:对象的共享——java并发编程实战
    第二章:线程安全性——java并发编程实战
  • 原文地址:https://www.cnblogs.com/lilongsheng/p/3226103.html
Copyright © 2020-2023  润新知