MySQL触发器教程(02):创建删除后触发器

文章目录

  • 介绍
  • 语法
  • 使用场景
  • 示例
    • 创建`students`表
    • 创建`scores`表
    • 创建删除触发器
  • 结论

介绍

MySQL 触发器是一种数据库对象,可以在特定的数据库表上自动执行一系列的操作,例如插入、更新或删除数据,当特定的事件(例如数据的插入、更新或删除)发生时触发。AFTER DELETE 触发器是 MySQL 触发器的一种类型,它在执行 DELETE 操作之后触发,允许在数据删除后执行自定义的操作。

语法

MySQL AFTER DELETE 触发器的语法如下:

CREATE TRIGGER trigger_name
AFTER DELETE
ON table_name FOR EACH ROW
trigger_body;

其中,trigger_name 是触发器的名称,table_name 是触发器所属的表名,trigger_body 是触发器要执行的操作。

使用场景

AFTER DELETE 触发器可以在以下情况下使用:

  • 数据关联:在删除数据时,可以使用 AFTER DELETE 触发器来自动更新其他相关的数据,例如删除一篇文章时,自动删除相关的评论。
  • 数据审计:在删除数据时,可以使用 AFTER DELETE 触发器来生成审计日志,记录删除操作的详细信息,以便后续审查和追溯。
  • 数据一致性维护:在删除数据时,可以使用 AFTER DELETE 触发器来维护数据的一致性,例如删除订单时,自动更新库存数量。

示例

以下是一个使用 AFTER DELETE 触发器的示例,假设有两个表:students表和 scores表。students表用于存储学生信息,scores表用于存储学生的成绩信息。当删除学生时,需要更新对应的学生成绩信息。

创建students

CREATE TABLE `students`  (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`student_name` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`age` int(11) NULL DEFAULT NULL,`gender` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`phone` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`address` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL,`class_id` int(11) NULL DEFAULT NULL,PRIMARY KEY (`id`) USING BTREE,INDEX `class_id`(`class_id` ASC) USING BTREE,CONSTRAINT `class_id` FOREIGN KEY (`class_id`) REFERENCES `classes` (`id`) ON DELETE RESTRICT ON UPDATE RESTRICT
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of students
-- ----------------------------
INSERT INTO `students` VALUES ('2021710001', '杜兰特', 18, '男', '15827236666', '湖北省武汉市', 1);
INSERT INTO `students` VALUES ('2021710002', '李丽', 18, '女', '15827236410', '河南省郑州市', 2);

创建scores

CREATE TABLE `scores`  (`id` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL,`math` int(11) NULL DEFAULT NULL,`english` int(11) NULL DEFAULT NULL,`physics` int(11) NULL DEFAULT NULL,`computer` int(11) NULL DEFAULT NULL,`history` int(11) NULL DEFAULT NULL,`politics` int(11) NULL DEFAULT NULL,`exam` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '模拟考试场次',`is_del` int(11) NULL DEFAULT 0
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;-- ----------------------------
-- Records of scores
-- ----------------------------
INSERT INTO `scores` VALUES ('2021710001', 98, 97, 96, 99, 93, 94, '模拟考试1', 0);
INSERT INTO `scores` VALUES ('2021710002', 98, 96, 95, 98, 92, 93, '模拟考试1', 0);

创建删除触发器

注意,其中的OLD.id中的OLD是固定写法

-- 创建 AFTER DELETE 触发器
DELIMITER //
CREATE TRIGGER after_delete_student
AFTER DELETE
ON students FOR EACH ROW
BEGIN-- 删除对应的订单商品信息DELETE FROM scores WHERE scores.id = OLD.id;
END;
//
DELIMITER ;

在上面的示例中,创建了一个名为 after_delete_studentAFTER DELETE 触发器,当在 students表中删除一条学生记录时,触发器会自动删除对应的学生成绩信息,确保数据的一致性。

结论

AFTER DELETE 触发器是 MySQL 中强大的数据库功能,可以在数据删除操作后执行自定义的操作,例如数据关联、数据审计和数据一致性维护等。通过合理使用 AFTER DELETE 触发器,可以提高数据库操作的效率和数据的一致性需要注意的是,在使用触发器时,应谨慎操作,避免不必要的触发和性能开销。在设计数据库时,合理选择和使用触发器,可以帮助开发人员更好地管理和维护数据库。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/863513.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

ES6面试题——var,let,const的区别

它们都是用来声明变量的。 1. var具有变量提升机制&#xff0c;let和const没有 /* var有变量提升机制 */ <script> console.log(str); // 打印出undefined var str "你好"; </script>/* let没有变量提升机制 */ <script> console.log(str); // …

【proteus经典实战】16X192点阵程序

一、简介 6X192点阵程序通常用于表示高分辨率图像或文字&#xff0c;其中16X表示像素阵列的宽度&#xff0c;192表示每个像素阵列中的点阵数&#xff0c;16X192点阵程序需要一定的编程知识和技能才能编写和调试&#xff0c;同时还需要考虑硬件设备的兼容性和性能等因素。 初始…

知识不成体系?这篇Mysql数据库将成为你的解忧杂货店!(子查询)

欢迎来到一夜看尽长安花 博客&#xff0c;您的点赞和收藏是我持续发文的动力 对于文章中出现的任何错误请大家批评指出&#xff0c;一定及时修改。有任何想要讨论的问题可联系我&#xff1a;3329759426qq.com 。发布文章的风格因专栏而异&#xff0c;均自成体系&#xff0c;不足…

网线直连电脑可以上网,网线连tplink路由器上不了网

家里wifi网络连不上好几天了&#xff0c;用网线直连电脑可以上网&#xff0c;但网线连tplink路由器wan口上不了网&#xff0c;无Internet连接&#xff0c;网线连lan口可以电脑上网&#xff0c;手机上不了。 后来发现网线的主路由用的192.168.0.1&#xff0c;我的路由器wan口自…

R包的4种安装方式及常见问题解决方法

R包的4种安装方式及常见问题解决方法 R包的四种安装方式1. install.packages()2. 从Bioconductor安装3. 从本地源码安装4. 从github安装 常见问题的解决1. 版本问题2. 网络/镜像问题3.缺少Rtools R包的四种安装方式 1. install.packages() 对于R自带的包的安装一般都可以通过…

共模和差模的基本概念

电压电流在导体或导线中传播时&#xff0c;存在两种工作形态&#xff1a;共模和差模。电子设备的信号线在进行相互通信时&#xff0c;至少会存在两根导线以形成电传输回路&#xff0c;除此之外&#xff0c;通常还存在第三个导体&#xff0c;即“参考地”。当信号正常传输时&…

51单片机第18步_将TIM0用作13位定时器

本章重点学习将TIM0用作13位定时器。 #include <REG51.h> //包含头文件REG51.h,使能51内部寄存器; //定时器的方式控制寄存器TMOD: GATE1,C/T1,M1_1,M1_0,GATE0,C/T0,M0_1,M0_0 //GATE11,表示T1是受INT1脚(P3.3)控制运行; //C/T10,表示T1的时钟源为fosc/12;C/T11,表示…

c++类成员指针用法

1&#xff09;C入门级小知识&#xff0c;分享给将要学习或者正在学习C开发的同学。 2&#xff09;内容属于原创&#xff0c;若转载&#xff0c;请说明出处。 3&#xff09;提供相关问题有偿答疑和支持。 c中新增类成员指针操作&#xff0c;为了访问方便&#xff0c;他是指…

Meven

目录 1.简介2.Maven项目目录结构2.1 约定目录结构的意义2.2 约定大于配置 3. POM.XML介绍3.2 依赖引用3.3 属性管理 4 Maven生命周期4.1 经常遇到的生命周期4.1 全部生命周期 5.依赖范围&#xff08;Scope&#xff09;6. 依赖传递6.1 依赖冲突6.2 解决依赖冲突6.2.1 最近依赖者…

微信小程序调用函数

在微信小程序中调用函数是一个基础且重要的概念&#xff0c;它贯穿于小程序开发的各个方面。函数可以定义在Page对象中&#xff0c;也可以定义在独立的JS文件中并通过模块导入使用。下面我将详细介绍几种常见的函数调用场景和方法。 1. 在Page对象中定义和调用函数 在小程序的…

鸿蒙项目实战-月木学途:1.编写首页,包括搜索栏、轮播图、宫格

效果展示 搜索栏制作 相关知识回顾 输入框组件TextInput 单行输入框类型.type(InputType.Normal)//基本输入框.type(InputType.Password)//密码.type(InputType.Email)//邮箱.type(InputType.Number)//数字.type(InputType.PhoneNumber)//电话号.type(InputType.Normal).type…

地图初始化-多视图几何基础

在ORB-SLAM2中初始化和使用的传感器类型有关&#xff0c;其中单目相机模式初始化相对复杂&#xff0c;需要运行一段时间才能成功初始化。而双目相机、 RGB-D相机模式下比较简单&#xff0c;一般从第一帧开始就可以完成初始化。 为什么不同传感器类型初始化差别这么大呢&#x…

微信小程序实现轻提示

微信小程序提供了多种内置的方法来显示提示信息&#xff0c;包括但不限于wx.showToast、wx.showModal和wx.showLoading等。这些方法可以快速地在小程序中实现各种提示效果&#xff0c;而无需手动编写复杂的动画或样式代码。下面&#xff0c;我将详细介绍这几个方法的使用。 1.…

spring-security安全框架(超精细版附带流程讲解图)

目录 一、回顾一下 二、security使用 2.1 覆盖掉默认配置「自定义配置」 2.2 如何自定义认证 2.3 纯纯自定义 2.4 jwt 2.5 官网认证流程 2.6 RBAC模型 4.1. 创建表结构 2.7 如何实现权限流程 一、回顾一下 security干啥的? 认证和授权 使用方式 引入依赖, 基于spri…

算法力扣刷题 二十五【28.找出字符串中第一个匹配项的下标】

前言 字符串篇&#xff0c;继续。 记录 二十五【28.找出字符串中第一个匹配项的下标】 一、题目阅读 给你两个字符串 haystack 和 needle &#xff0c;请你在 haystack 字符串中找出 needle 字符串的第一个匹配项的下标&#xff08;下标从 0 开始&#xff09;。如果 needle 不…

RESTful Web 服务详解

RESTful Web 服务是一种基于 Representational State Transfer (REST) 架构风格的 Web 服务&#xff0c;它利用 HTTP 协议来传输数据&#xff0c;支持多种数据格式如 JSON 和 XML。在 Spring 框架中&#xff0c;通过简单配置和注解可以轻松实现 RESTful Web 服务。在本文中&…

C语言中的基础指针操作

在C语言中&#xff0c;指针是一个非常重要的概念&#xff0c;它提供了直接访问内存地址的能力。指针变量用于存储内存地址&#xff0c;而不是数据值&#xff0c;在某种意义上和门牌号具有相似含义&#xff1a;指针是一个变量&#xff0c;其存储的是另一个变量的内存地址&#x…

java之动态代理

1 代理模式 代理模式提供了对目标对象额外的访问方式&#xff0c;即通过代理对象访问目标对象&#xff0c;这样可以在不修改原目标对象的前提下&#xff0c;提供额外的功能操作&#xff0c;扩展目标对象的功能。简言之&#xff0c;代理模式就是设置一个中间代理来控制访问原目标…

超级对齐是什么?

超级对齐是一个在人工智能&#xff08;AI&#xff09;领域中的概念&#xff0c;其定义和重要性可以从以下几个方面来清晰地阐述&#xff1a; 1. **定义**&#xff1a; - 超级对齐是指确保在所有领域都超越人类智能的超级人工智能&#xff08;AI&#xff09;系统按照人类的价值观…

C++标准模板(STL)- 迭代器库 - 流迭代器- 写入 std::basic_ostream 的输出迭代器(二)

迭代器库-流迭代器 迭代器库提供了五种迭代器的定义&#xff0c;同时还提供了迭代器特征、适配器及相关的工具函数。 迭代器分类 迭代器共有五 (C17 前)六 (C17 起)种&#xff1a;遗留输入迭代器 (LegacyInputIterator) 、遗留输出迭代器 (LegacyOutputIterator) 、遗留向前迭代…