【SQL触发器】类型 FOR 、AFTER、 Instead of到底是什么鬼

2023-10-29

前言:

上一篇博客(博客连接:https://blog.csdn.net/jerry11112/article/details/82924714 讲述了触发器的基本概念,触发器什么时候用,为什么用!这篇博客将简述触发器的类型,由于FOR触发器与AFTER触发器是一个作用,所以触发器分为AFTER触发器,与Instead of 触发器!

为了让大家明白触发器,我先把我的数据库是干嘛的给大家介绍一下吧,我的数据库是一个新闻发系统对应的数据库 ,里边有两个表一个是新闻类别表caregory ,还有一个是新闻表news,其中一条类新闻对应多条新闻,但是一条新闻只是属于一类!故有下图!其中news表的主键为id,外键为caID,与care gory的主键相对,此时通过主外键将两个表连接起来!

在这里插入图片描述

接下来我们要完成的操作是删除表中一条新闻类别信息,我们此时建立一条delete触发器,通过这个触发器我们来了解一下AFTER触发器与instead of 触发器之间到底有何区别!

1、AFTER(for)触发器 (操作后)

after触发器是指在操作成功后,所采取的一些动作!

比如:下面是我创建好的一个after触发器

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
creat trigger [dbo].[T_CaregoryDelete]          --触发器的名字为T_CaregoryDelete
on [dbo].[caregory]                                         --是caregory类别表的触发器
after delete                                                     --after代表执行删除后执行as后边的语句
as
  begin
	delete news where caId=(select id from deleted)      --激发触发器后我要执行的动作,其中deleted是一个系统默认临时表
  end

接下来我编译代码
delete from caregory where id=4,报了如下的错误!
在这里插入图片描述

刚才我说过了,我们的类别表caregory与新闻表news表是通过主外键连接的,我们在执行语句delete from caregory where id=4的时候我们的news表对应的新闻也应该被删除!如下所示图!

在这里插入图片描述
在这里插入图片描述

但是我们的after触发器只能是在执行完delete操作后执行,如果此时我们执行
delete from caregory where id=4 ,那么我们将我们id信息为4的类别的新闻删除后才可以触发触发器,那么我们的这类新闻下的所有新闻就不能被删除了,这时候我们的表是主外键连接的,所以就报了上述错误!那么这下该怎么办呢,这时候解决instead of 触发器登场!

2、instead of 触发器

对数据的操作只是一个“导火索”而已,真正起作用的是触发器里面的动作;往往这种触发器会有很多分支判断语句在里面,根据不用的条件做不同的动作!

INSTEAD OF 触发器用来代替通常的触发动作,即当对表进行INSERT、UPDATE 或 DELETE 操作时,系统不是直接对表执行这些操作,而是把操作内容交给触发器,让触发器检查所进行的操作是否正确。如正确才进行相应的操作。因此,INSTEAD OF 触发器的动作要早于表的约束处理。

真正起作用的是触发器里面的动作,接下来是对应触发器的代码

SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER trigger [dbo].[T_CaregoryDelete]
on [dbo].[caregory]
instead of delete
as
  begin
	delete news where caId=(select id from deleted)
	delete caregory where id=(select id from deleted)
  end

此时执行语句delete from caregory where id=4,那么我们就成功的将我们类别表信息删除,同时将我们类别表下对应的这类的新闻页一块删除了!

这里可能有人就有疑问了,算上delete from caregory where id=4 共有三个delete,注意上面我强调了一句话,真正起作用的是触发器里面的动作!

后记:

after触发器是在操作成功后,所采取的一些动作
而对于instead of触发器,真正起作用的是触发器里面的动作!

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

【SQL触发器】类型 FOR 、AFTER、 Instead of到底是什么鬼 的相关文章

  • 【计算机开题报告】基于JSP的服装店销售管理系统

    1 选课目的意义 21世纪是一个信息化时代 随着中国经济的发展和人民生活水平的提高 服装商场的普及程度日益增大 竞争也在逐渐白炽化 为了进一步提高服装商场的经营效率 在服装店销售管理中引入计算机管理系统成为了必然的选择 由于中国环境的特殊性
  • 【计算机开题报告】家具销售库存管理信息系统

    一 选题的目的 意义及相关研究动态和自己的见解 随着当今社会信息化的发展 电子自动化办公越来越为各人所重视 它能有效地收集 处理各种信息 极大地提高了办事效率 而计算机技术各种软件工作平台不断的发展 又为电子自动化办公的实现提供了良好的前景
  • 如何处理不稳定的自动化测试?

    abluecolor 在解决这个问题之前 请停止编写更多测试 因为这将花费你较高的测试维护成本 你需要尽快行动起来对不稳定的原因进行深入研究 找到不稳定的根因 并且尝试在流程 环境和代码方面做一些优化工作解决它 MasterKindew 如
  • ERROR 5025 (HY000): Insert has filtered data in strict mode, tracking_url=http://IP

    通过http api批量插入数据的时候报Reason null value for not null column column xxx src line 解决方法 检查是否有null值存在 增加数据库字段长度 如下语句更改长度 ALTER
  • python按列写入数据到excel

    要将数据按列写入 Excel 可以使用 Python 的 openpyxl 库 首先 需要安装 openpyxl 库 可以使用以下命令在终端或命令提示符中安装 pip install openpyxl 然后 可以按照以下步骤编写代码 1 导
  • 成为一个黑客,就按照这个路线来!

    前几天一个同学在聊天中提到毕业后想要从事网络安全方向的工作 虽然他本身也是学计算机的 但是又怕心有余而力不足 因为 从事网络安全方面的工作向来起点都比较高 大学里少有开设这类课程的 在学校能够学到的知识比较有限 网上的关于这方面课程的质量又
  • 软件开发和网络安全哪个更好找工作?

    为什么今年应届毕业生找工作这么难 有时间去看看张雪峰今年为什么这么火就明白了 这么多年人才供给和需求错配的问题 在经济下行的今年 集中爆发 供给端 大学生越来越多 需求端 低端工作大家不愿去 高端岗位又太少 很多基础行业 比如机械 土木 所
  • AntDB内存管理之内存上下文之内存上下文机制是怎么实现的

    4 内存上下文机制是怎么实现的 下文将针对内存上下文机制进行代码说明 本次以AntDB的代码为例 来解析内存上下文的实现方式 4 1 最基础的数据结构 MemoryContextData和MemoryContextMethods是内存上下文
  • AntDB内存管理之内存上下文之如何使用内存上下文

    5 如何使用内存上下文 使用内存上下文之前 我们需要先对其进行创建 AntDB启动时已经创建并初始化好了部分内存上下文 例如 TopMemoryContext 这个TopMemoryContext是所有内存上下文的父节点或者祖先节点 一般我
  • 【Mysql】InnoDB 引擎中的页目录

    一 页目录和槽 现在知道记录在页中按照主键大小顺序串成了单链表 那么我使用主键查询的时候 最顺其自然的办法肯定是从第一条记录 也就是 Infrimum 记录开始 一直向后找 只要存在总会找到 这种在数据量少的时候还好说 一旦数据多了 遍历耗
  • 软件测试/测试开发/全日制/测试管理丨Redis内存数据库

    Redis是一种开源 内存中的数据结构存储系统 它提供了高性能 灵活性和丰富的数据结构 以下是Redis内存数据库的基本介绍 键值存储 Redis基于键值对的存储模型 其中每个键都与一个特定的值相关联 这种简单的数据模型使其易于使用和理解
  • 38条Web测试经验分享

    1 页面链接检查 每一个链接是否都有对应的页面 并且页面之间切换正确 可以使用一些工具 如LinkBotPro File AIDCS HTML Link Validater Xenu等工具 LinkBotPro不支持中文 中文字符显示为乱码
  • 图解python | 字符串及操作

    1 Python元组 Python的元组与列表类似 不同之处在于元组的元素不能修改 元组使用小括号 列表使用方括号 元组创建很简单 只需要在括号中添加元素 并使用逗号隔开即可 tup1 ByteDance ShowMeAI 1997 202
  • 通俗易懂,十分钟读懂DES,详解DES加密算法原理,DES攻击手段以及3DES原理

    文章目录 1 什么是DES 2 DES的基本概念 3 DES的加密流程 4 DES算法步骤详解 4 1 初始置换 Initial Permutation IP置换 4 2 加密轮次 4 3 F轮函数 4 3 1 拓展R到48位 4 3 2
  • 电商数据api拼多多接口获取商品实时数据价格比价api代码演示案例

    拼多多商品详情接口 接口接入入口 它的主要功能是允许卖家从自己的系统中快速获取商品详细信息 通过这个接口 卖家可以提取到商品的各类数据 包括但不限于商品标题 价格 优惠价 收藏数 下单人数 月销售量等 此外 还可以获取到商品的SKU图 详情
  • 深入了解 Python MongoDB 操作:排序、删除、更新、结果限制全面解析

    Python MongoDB 排序 对结果进行排序 使用 sort 方法对结果进行升序或降序排序 sort 方法接受一个参数用于 字段名 一个参数用于 方向 升序是默认方向 示例 按名称按字母顺序对结果进行排序 import pymongo
  • 【计算机毕业设计】电影播放平台

    电影播放平台采用B S架构 数据库是MySQL 网站的搭建与开发采用了先进的java进行编写 使用了springboot框架 该系统从两个对象 由管理员和用户来对系统进行设计构建 主要功能包括 个人信息修改 对用户 电影分类 电影信息等功能
  • 【ES6】解构语句中的冒号(:)

    在解构赋值语法中 冒号 的作用是为提取的字段指定一个新的变量名 让我们以示例 const billCode code version route query 来说明 billCode code version 表示从 route query
  • MongoDB - 库、集合、文档(操作 + 演示 + 注意事项)

    目录 一 MongoDB 1 1 简介 a MongoDB 是什么 为什么要使用 MongoDB b 应用场景 c MongoDB 这么强大 是不是可以直接代替 MySQL d MongoDB 中的一些概念 e Docker 下载 1 2
  • 温室气体排放更敏感的模型(即更高的平衡气候敏感性(ECS))在数年到数十年时间尺度上也具有更高的温度变化(Python代码实现)

    欢迎来到本博客 博主优势 博客内容尽量做到思维缜密 逻辑清晰 为了方便读者 座右铭 行百里者 半于九十 本文目录如下 目录 1 概述 2 运行结果 3 参考文献 4 Python代码 数据

随机推荐

  • 操作系统主要知识点

    1 进程管理 1 进程是具有独立功能程序在某个数据集合上的一次执行过程 线程是进程内的一个执行实体或执行单元 进程和线程的区别 a 不同进程的地址空间是独立的 而同一进程内的线程共享同一地址空间 一个进程的线程在另一个进程内是不可见的 b
  • MySQL 数据库 (实现JDBC工具类)

    JDBC工具类 package com itcast ma import java sql Connection import java sql DriverManager import java sql PreparedStatement
  • 用c++写一个贪吃蛇的游戏

    写一个贪吃蛇游戏需要涵盖以下几个方面的知识 图形绘制 使用控制台的图形绘制函数 例如在 Windows 中使用的是 conio h 中的图形绘制函数 游戏逻辑 包括贪吃蛇的移动 食物的生成 检测蛇是否撞墙或撞到自己等 数据存储 使用数组或链
  • 缓存知多少?详解@Cacheable@CacheEvict@Caching

    缓存注解 一 基础概念 1 Cache介绍 2 Cacheable CachePut CacheEvict 的主要参数 二 Cacheable使用demo 三 CacheEvict使用demo 四 Caching使用demo 一 基础概念
  • 代理IP和Socks5代理:跨界电商与爬虫的智能引擎

    跨界电商 作为全球市场的一部分 对数据的需求越来越大 同时 随着互联网的发展 爬虫技术也在不断演进 成为了跨界电商的关键工具之一 然而 随之而来的是网站的反爬虫机制和网络安全风险 在这种情况下 代理IP和Socks5代理应运而生 为企业提供
  • 安卓代码获取系统属性值

    安卓代码获取系统属性值 前言 代码实现 前言 大家可能知道 使用adb shell getprop命令可以直接获取系统属性值 但有时候需要在JAVA代码中获取系统属性 接下来说一下如何实现 代码实现 在build gradle的androi
  • C++获取CPUID

    include
  • 客户流失预测--基于R语言C5.0

    对于中国各大电信运营商而言 在整体市场规模相对稳定的情况下 能否维护好现有的客户是保证其收益的重中之重 因此 预测客户流失的可能性与否 直接关系到运营商的客户维护的重点正确与否 本文将基于 狗熊会 基础案例 收集客户流失 来演示基于C5 0
  • flutter webview 在iOS上不显示的问题

    使用的插件是 webview flutter 0 3 22 1 在android中可以正常显示 但是在ios端中既没有报错 又没有显示出来 后来查看插件使用说明才发现 忘记在ios端中端配置文件中进行配置了 此时我们需要在ios的runne
  • java 包扫描器

    java 包扫描器 扫描指定包下的所有java文件 并返回class数组 直接上代码 import java io File import java net URISyntaxException import java net URL im
  • 【Linux】gcc编译过程、make和makefile的概念与区别、Linux简单进度条实现

    文章目录 1 gcc编译过程 1 1预处理 1 2编译 1 3汇编 1 4链接 2 自动化构建工具 make和makefile 2 1使用背景 2 2两者的概念和区别 2 3项目清理 3 Linux简单进度条的实现 1 gcc编译过程 1
  • ubuntu安装qt

    ubuntu安装qt 第一步 下载安装包https download qt io archive qt 5 14 5 14 2 第二步 更改权限 sudo chmod x qt opensource linux x64 5 12 12 ru
  • JS中使用正则表达式g模式和非g模式的区别

    g是global的缩写啊 就是匹配全部可匹配结果 如果你不带g 在正则过程中 字符串是从左至右匹配的 如果匹配成功就不再继续向右匹配了 如果你带g 它会重头到尾的把正确匹配的字符串挑选出来 例如 1 2 3 4 5 var str aaaa
  • C++ std::vector删除元素的几种方式及区别

    容器vector在删除过程中 常用的函数 函数 作用 pop back 删除 vector 容器中最后一个元素 该容器的大小 size 会减 1 但容量 capacity 不会发生改变 erase iter 删除 vector 容器中ite
  • 机器学习——Kmeans聚类算法

    目录 简介 手肘法 手肘法核心思想 轮廓系数 代码举例1 代码举例2 实例 简介 K均值聚类算法是先随机选取K个对象作为初始的聚类中心 然后计算每个对象与各个种子聚类中心之间的距离 把每个对象分配给距离它最近的聚类中心 聚类中心以及分配给它
  • Qt之对话框设计——利用QPalette改变控件颜色

    QPalette类相当于对话框或控件的调色板 它管理着控件或窗体的所有颜色信息 每个窗体或控件都包含一个QPalette对象 在显示时按照它的QPalette对象中对各部分各状态下的颜色的描述来进行绘制 QPalette类有两个基本的概念
  • 【数学建模】混合整数规划MIP(Python+Gurobi代码实现)

    目录 1 概述 2 入门算例 2 1 算例 2 2 求解 Pulp库和cvxpy 3 进阶算例 3 1 算例 3 2 Python Gurobi代码实现 3 3 运行结果 1 概述 混合整数规划 MIP 是 NP hard 问题中的一类 它
  • ASP.NET MVC 之View相关

    VS2015 新建一个MVC工程 验证改成No Authentication 界面大致如下 得到一个解决方案如下 下面分析一下View ViewBag Title ViewPageOne Layout Views Shared Layout
  • 什么是数据挖掘,给出一个你在生活中应用数据挖掘技术的例子,分析数据挖掘的意义。...

    数据挖掘是指从大量数据中自动或半自动地发现有用的信息 模式和知识的过程 数据挖掘通常包括预处理数据 选择适当的数据挖掘技术 应用算法和模型 评估结果和解释发现的知识 一个我在生活中应用数据挖掘技术的例子是使用社交媒体平台的推荐算法 社交媒体
  • 【SQL触发器】类型 FOR 、AFTER、 Instead of到底是什么鬼

    前言 上一篇博客 博客连接 https blog csdn net jerry11112 article details 82924714 讲述了触发器的基本概念 触发器什么时候用 为什么用 这篇博客将简述触发器的类型 由于FOR触发器与A