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

介绍

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 触发器,可以提高数据库操作的效率和数据的一致性需要注意的是,在使用触发器时,应谨慎操作,避免不必要的触发和性能开销。在设计数据库时,合理选择和使用触发器,可以帮助开发人员更好地管理和维护数据库。

  • 15
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

叁拾舞

你的鼓励将是我最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值