CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGININSERT INTO archive_orders(order_num, order_date, cust_id)VALUES(OLD.order_num, OLD.order_date, OLD.cust_id);
END;

在任意订单被删除前将执行此触发器。它使用一条INSERT语句将OLD中的值(要被删除的订单)保存到一个名为archive_orders的存档表中

--《MySQL必知必会》

然而执行此触发器会报如下错误

Cannot delete or update a parent row: a foreign key constraint fails (`crashcourse`.`orderitems`, CONSTRAINT `fk_orderitems_orders` FOREIGN KEY (`order_num`) REFERENCES `orders` (`order_num`))

看报错提示显示,orders的order_num是orderitems表的外键。可以在DELETE触发器中加入对orderitems的删除操作解决这个问题。

CREATE TRIGGER deleteorder BEFORE DELETE ON orders
FOR EACH ROW
BEGINDELETE FROM orderitems where order_num=OLD.order_num;INSERT INTO archive_orders(order_num, order_date, cust_id)VALUES(OLD.order_num, OLD.order_date, OLD.cust_id);
END;

维护引用完整性

orders表和orderitems表通过主键和外键组成关系表,如果order表的行可以直接删除,那么被删除的order_num在orderitems表中对应的订单物品没法再通过联结来访问,同时这些行的order_num也会变成非法值。MySQL通过此机制来维护引用完整性。

锚点:MySQL必知必会DELETE触发器执行报错

MySQL DELETE触发器相关推荐

  1. mysql delete语句_MySQL ------ 触发器(TRIGGER)(二十七)

    MySQL 语句在需要时被执行,存储过程也是,但是你要是想要某条(或某些语句)在事件发生时自动执行,该怎么办触发器由此而来 触发器:某个表发生更改时自动处理.触发器是MySQL响应delete,ins ...

  2. 解决mysql级联删除时不会启动delete触发器

    解决mysql级联删除时不会启动delete触发器 目前mysql 5.* 版本在级联删除时不会执行delete触发器,当外键级联删除后没有启动触发器可能会产生一些垃圾数据,这些垃圾数据可能因为某些原 ...

  3. mysql使用触发器,delete、insert、update触发器

    mysql5之后的版本才支持触发器. 想要某条语句在事件发生时自动执行,可使用触发器. 例如下面场景: 每当增加一条顾客数据时,都检查其号码格式是否正确.每订购一个产品时,都从库存中减去订购的数量无论 ...

  4. mysql之触发器trigger

    mysql之触发器trigger 触发器(trigger):监视某种情况,并触发某种操作. 触发器创建语法四要素:1.监视地点(table) 2.监视事件(insert/update/delete)  ...

  5. mysql暂停触发器_mysql如何临时禁用触发器

    mysql如何临时禁用触发器 起因 Mysql的触发器,在触发控制上,只能按照对数据的操作方式(Insert,Update,Delete)以及操作前后(before,after)进行触发控制.但是如果 ...

  6. MYSQL:基础——触发器

    MYSQL基础--触发器 引入触发器 什么是触发器 如果你想要某条语句(或某些语句)在事件发生时自动执行.比如: 每当订购一个产品时,都从库存数量中减去订购的数量:无论何时删除一行,都在某个存档表中保 ...

  7. mysql latid1_mysql触发器的实战经验

    1   引言 Mysql的触发器和存储过程一样,都是嵌入到mysql的一段程序.触发器是mysql5新增的功能,目前线上凤巢系统.北斗系统以及哥伦布系统使用的数据库均是mysql5.0.45版本,很多 ...

  8. mysql 利用触发器(Trigger)让代码更简单

    一,什么触发器 1,个人理解 触发器,从字面来理解,一触即发的一个器,简称触发器(哈哈,个人理解),举个例子吧,好比天黑了,你开灯了,你看到东西了.你放炮仗,点燃了,一会就炸了. 2,官方定义 触发器 ...

  9. mysql游标触发器批量_MySQL游标和触发器

    一.游标 定义:是一个存储在MySQL服务器上的数据库查询,是一种被select语句检索出来的结果集. 作用:方便在检索出来的结果集中前进或后退一行或多行. PS:游标主要用于交互式应用:MySQL中 ...

最新文章

  1. 梯度倒谱matlab程序,MFCC梅尔倒谱参数及matlab代码
  2. WeakMap 本身释放,而 keyObject 没有释放的情况下,value 会释放吗?
  3. java继承与多态_Java继承与多态
  4. JAVAAPI学习之Calendar类;Calendar类set()、add()、roll()方法区别
  5. php网页布局边框,用CSS来设置网页当中的边框
  6. 线程中task取消_Rust Async: async-task源码分析
  7. c# xls 复制一行_编写干净的C#代码技巧
  8. [Teamcenter 2007 开发系列] web 非空验证
  9. jQuery按键监听(模拟QQ聊天:按下回车键发送消息)
  10. 工作流之流程定义存储表
  11. 强大的日志分析工具AWStats
  12. linux下运行jar
  13. 获取2个集合ListT的共同元素
  14. Redis中setex与setnx的区别?
  15. 携手绿凯智能,趣开门人脸识别门禁落地武汉光谷生物城
  16. 12306排队是什么意思_12306 说:有时候,能排队也是一种幸福!
  17. python3.6打包成exe文件_详解如何将python3.6软件的py文件打包成exe程序
  18. 一个html页面如何包含另一个html页面
  19. 数字经济创新(Digital-economy-innovation)
  20. 2、Arduino开发语言

热门文章

  1. PHP 实现CSV格式的上传下载(CI框架)
  2. Verilog 无符号乘法器
  3. 北京大学程序设计MOOC-魔兽世界系列大作业(一)
  4. matlab求n 之和,matlab求和,n=1到20,n!
  5. 解构赋值是什么?如何使用?
  6. C++算法(高精度算法)
  7. 安卓开发权威指南!含泪狂刷Android基础面试118题,聪明人已经收藏了!
  8. MySQL索引算法原理及慢查询优化
  9. Linux上安装部署Solr-4.10.4并测试
  10. 传富士康将为新一代iPhone生产蓝宝石屏幕