MySQL - 删除级联上的外键 - 是否有定义的执行顺序?

2024-04-07

我的 MySQL 有问题 - 多个表上的 CASCADE ON DELETE 规则。显然,“CASCADE ON DELETE”规则的执行顺序取决于它们的定义顺序。

但是这个执行顺序是否明确定义或者取决于 MySQL 版本?

这是我的三个表“A”、“B”、“C”的简单示例

create table `A` (`id` NUMERIC(10,0) NOT NULL)  ENGINE=INNODB;
create table `B` (`id` NUMERIC(10,0) NOT NULL, `a_id`  NUMERIC(10,0) NOT NULL) ENGINE=INNODB;
create table `C` (`id` NUMERIC(10,0) NOT NULL, `a_id`  NUMERIC(10,0) NOT NULL, `b_id` NUMERIC(10,0) NOT NULL) ENGINE=INNODB;

ALTER TABLE `A` ADD PRIMARY KEY (`id`);
ALTER TABLE `B` ADD PRIMARY KEY (`id`);
ALTER TABLE `C` ADD PRIMARY KEY (`id`);


ALTER TABLE `C` ADD CONSTRAINT `C1` FOREIGN KEY (`a_id`) REFERENCES `A` (`id`) ON DELETE CASCADE;
ALTER TABLE `B` ADD CONSTRAINT `B1` FOREIGN KEY (`a_id`) REFERENCES `A` (`id`) ON DELETE CASCADE;
ALTER TABLE `C` ADD CONSTRAINT `C2` FOREIGN KEY (`b_id`) REFERENCES `B` (`id`);

如果我插入以下数据:

INSERT INTO A (id) VALUES (1);
INSERT INTO B (id, a_id) VALUES (1,1);
INSERT INTO C (id, a_id, b_id) VALUES (1,1,1);

...并尝试删除表“A”中的唯一条目:

delete from A where id=1;

...我收到以下错误消息:

Cannot delete or update a parent row: a foreign key constraint fails (`C`, CONSTRAINT `C2` FOREIGN KEY (`b_id`) REFERENCES `B` (`id`))

但是如果我将外键约束的定义更改为:

ALTER TABLE `C` ADD CONSTRAINT `C1` FOREIGN KEY (`a_id`) REFERENCES `A` (`id`) ON DELETE CASCADE;
ALTER TABLE `C` ADD CONSTRAINT `C2` FOREIGN KEY (`b_id`) REFERENCES `B` (`id`);
ALTER TABLE `B` ADD CONSTRAINT `B1` FOREIGN KEY (`a_id`) REFERENCES `A` (`id`) ON DELETE CASCADE;

...一切安好...

感谢您的帮助


Your ALTER TABLE table ADD CONSTRAINT foreign_key FOREIGN KEY是相同的,因此它们不可能是错误的原因。

(...文本已删除)


无法解释这种奇怪的行为。可以建议一个解决方法:

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

MySQL - 删除级联上的外键 - 是否有定义的执行顺序? 的相关文章

  • 表已满(使用 MEMORY 引擎)

    我想将生产数据库传输到我的开发机器上进行测试 它有 6 张桌子MEMORY出于性能目的的引擎 I did mysqldump routines hxxx uxxx pxxx prod database gt prod dump sql 当我
  • 如果一列没有值,MySQL 返回最大值或 null

    我尝试获取 mysql select 的最大值 但如果有一行不包含时间戳 则希望将其设置为 null empty 0 表统计数据 简化 ID CLIENT ORDER DATE CANCEL DATE 1 5 1213567200 2 5
  • 如何在 MySQL Insert 语句中添加 where 子句?

    这不起作用 INSERT INTO users username password VALUES Jack 123 WHERE id 1 有什么想法如何通过 id 将插入范围缩小到特定行吗 在插入语句中 您不会有现有行来执行 where 语
  • 每个搜索词显示一行,如果未找到则替换默认值

    Query SELECT product id name FROM product WHERE barcode in 681027 8901030349379 679046 679047 679082 679228 679230 67923
  • #1115 - 未知字符集:'utf8mb4'

    我的电脑上运行着一个本地网络服务器 用于本地开发 我现在正处于导出数据库并导入到我的托管 VPS 的阶段 导出然后导入时出现以下错误 1115 未知字符集 utf8mb4 有人能指出我正确的方向吗 该错误明确表明您没有utf8mb4您的阶段
  • MySQL Workbench 忽略外键

    在处理 MySQL Workbench 中的 SQL 编辑器时 我偶然发现了一些奇怪的事情 其中 执行似乎忽略了外键约束 这是一个例子 create database testdb use testdb create table t1 te
  • 显示一个表中的所有记录以及另一表中的匹配记录

    您好 我有一张下表 其中记录了活动和积分 Activites A ID Site ActivityValue ActivityName 1 site1 7 ActivityName1 2 site1 6 ActivityName2 2 si
  • 如何解决 注意:未定义索引:第 21 行 C:\xampp\htdocs\invmgt\manufactured_goods\change.php 中的 id [重复]

    这个问题在这里已经有答案了 我的 PHP 代码有一个问题 显示 注意 未定义的索引 我确信它非常简单 因为我是初学者 所以我不太清楚到底出了什么问题 所以请帮助我 这是代码
  • MySQL 跨表计数(*) 查询帮助

    SELECT name COUNT AS count FROM t1 t2 WHERE t2 id t1 id GROUP BY t2 id 我想从 t1 获取名称以及 t2 中 id 与 t1 相同的行数 到目前为止我已经得到了上面的内容
  • Laravel Schema Builder 改变存储引擎

    我正在尝试更改表并将其存储引擎更改为InnoDb 当我跑步时php artisan migrate它完成且没有错误 然而 当我检查 Sequel Pro 中的存储引擎时 没有任何变化 public function up Schema ta
  • IN 子查询中的 GROUP_CONCAT

    SELECT A id A title FROM table as A WHERE A active 1 AND A id IN SELECT GROUP CONCAT B id from B where user 3 如果我启动子查询SE
  • 如何将“mysql source”命令与 mysql 变量一起使用?

    我需要从 mysql shell 执行一个基于如下条件的 SQL 文件 mysql gt 源 var 其中 var 包含文件名 这不可能 source是MySQL客户端程序在本地识别并执行的命令 变量存在于服务器上 因此客户端不知道什么 v
  • MySQL 复制是双向的

    我们已经成功设置了 MySQL 文献中描述的主从复制 不过 我很好奇是否有人设置了双向复制 例如 如果安装了 Drupal 或 Wordpress 第一个 主 数据库服务器出现故障 第二个 从属 数据库服务器恢复正常 与此同时 用户不断进行
  • 更新 SQLAlchemy 中的特定行

    我将 SQLAlchemy 与 python 一起使用 我想更新表中等于此查询的特定行 UPDATE User SET name user WHERE id 3 我通过 sql alchemy 编写了这段代码 但它不起作用 session
  • MySQL 最佳实践:SELECT 子递归尽可能提高性能?

    我想选择一个根项目及其子项 使其性能尽可能高 我更喜欢使用嵌套集模型 但这次表结构遵循邻接模型 有关嵌套集和邻接模型的更多信息 http mikehillyer com articles managing hierarchical data
  • 如何根据条件删除结果以计算平均值

    我有下面的架构 对其的快速解释是 鲍勃评分为 5 5 詹姆斯评分 1 5 梅西百货评分高达 5 5 逻辑 如果我是 A 请查找我屏蔽的所有人 查阅所有电影评论 任何留下电影评论且 personA 已屏蔽的人 请将其从计算中删除 计算电影的平
  • Postgresql 的 SQL_NO_CACHE?

    MySQL 关键字是否有等效的 postgresqlSQL NO CACHE 或 SQL Serverdbcc drop clean buffers 即您可以简单地将其包含在 SQL 语句中或作为脚本的一部分吗 UPDATE 这个问题 查看
  • PHP,文本从数据库中回显,没有换行,全部一体

    我的数据库中有一个长文本 从 php mayadmin 来看它看起来很好 但是当我将它回显到页面时 它会丢失所有格式 即没有新行 全部都在一个块中 有任何想法吗 Thanks 可能是因为换行符是 n 并且 html 想要 br 所以使用nl
  • 如何编写可以补偿拼写错误数据的 MySQL 搜索?

    有没有什么方法可以编写一个 MySQL 搜索来弥补用户在拼写等方面的错误 作为随机示例 有人可能会输入 电子邮件受保护 cdn cgi l email protection代替 电子邮件受保护 cdn cgi l email protect
  • 打印表数据mysql php

    我在尝试打印表格的一些数据时遇到问题 我是 php mysql 的新手 但我认为我的代码是正确的 这里是 h1 Lista de usu rios h1

随机推荐

  • Python 中 C++ 的简单分词器

    努力寻找一个Python脚本库来标记 找到特定的标记 如函数定义名称 变量名称 关键字等 我已经设法使用类似的方法找到关键字 空格等this https docs python org 3 library re html writing a
  • 像 USE 这样的函数可以指向不同服务器上的 SQL 数据库吗?

    在 SQL Server 中 您可以应用use函数将查询指向另一个数据库 例如 USE databasename GO 是否有一个功能允许您指向不同的数据库服务器并使用该服务器上的数据库 我希望这能起作用 但没有运气 USE servern
  • 如何更新负载均衡的多个 EC2 实例? [关闭]

    Closed 这个问题是无关 help closed questions 目前不接受答案 因此 我一直在使用亚马逊云 AWS 我试图弄清楚如何将文件传输到所有服务器 如果它们负载平衡 起初我以为我可以将 3 个不同的实例绑定到一个负载均衡器
  • 选择器、图层列表和形状/位图位于同一 xml 中

    我在 xml 里面有这个代码drawable folder
  • 通过 SSH 连接 MySQL 时遇到问题

    我正在本地 OS X 计算机上运行 Node Express 网站 我需要 ssh 到远程 mysql 数据库 以便我可以开始针对它编写查询 现在 当我通过 OS X Yosemite 终端执行此操作时 我可以 ssh 到云中的远程服务器
  • Firebase OrderByChild() 和 EqualTo() 无法正常工作

    我需要在随机键中找到现有的子项 并且我使用 OrderByChild 和 EqualTo 来过滤查询 但它的行为非常奇怪 有时它显示子项仅存在一个子项 有时它不起作用 我需要检查 February 2019 的子项 date expense
  • 从 Resources 子文件夹中获取文件名

    在我的资源文件夹中 我有一个图像子文件夹 我想从该文件夹中获取这些图像的所有文件名 尝试了几个Resources loadAll之后获取 name 但没有成功的方法 这是实现我在这里想做的事情的正确做法吗 没有内置 API 可以执行此操作
  • 从具有多个结果集的存储过程中检索数据

    给定 SQL Server 中的一个存储过程 它有多个select语句 有没有办法在调用过程时单独处理这些结果 例如 alter procedure dbo GetSomething as begin select from dbo Per
  • ASP.NET:权限/身份验证架构

    我正在考虑建立一个验证在我的 ASP NET 应用程序中 具有以下要求 一名用户只有一个角色 即管理员 销售经理 销售 角色拥有一组 CRUD 访问现有对象子集的权限 IE 销售人员对对象类型 产品 具有 CREAD READ WRITE
  • Attention机制中的“源隐藏状态”指的是什么?

    注意力权重计算如下 我想知道什么h s指 在tensorflow代码中 编码器RNN返回一个元组 encoder outputs encoder state tf nn dynamic rnn 正如我所想 h s应该是encoder sta
  • MessagePack:快速跨平台序列化器和RPC - 请分享经验

    寻找一些我偶然发现的快速 简单且稳定的 RPC 库消息包 http msgpack org 项目看起来非常好 它也正在积极开发中 如果您以任何方式使用它 可以分享一下您的经验吗 附 我认为这个问题应该是社区维基 好吧 过了一段时间 我发现
  • 访问 Django 模板中 ImageField 上的图像尺寸?

    I have ImageField在我的模型中 我可以在模板中显示图像 但是 如何检索图像的高度和宽度 请参阅文档图像场 https docs djangoproject com en 1 11 ref models fields djan
  • `sorted(list)` 与 `list.sort()` 有什么区别?

    list sort 对列表进行排序并替换原始列表 而sorted list 返回列表的排序副本 而不更改原始列表 什么时候一个人比另一个人更受青睐 哪个更有效率 多少 列表可以恢复到未排序状态吗list sort 已执行 Please us
  • web.config 中带点的路径

    我需要在 web config 文件中添加一个位置元素 但路径以点开头 而且我认为我无法更改该路径 它是为了让我们加密 http letsencrypt org自动化 如果我让点 就像
  • 将自定义 SecurityExpressionOperations 中的方法注册为 Spring SpEL 函数

    我有以下实现MethodSecurityExpressionOperations public class CustomMethodSecurityExpressionRoot extends SecurityExpressionRoot
  • Google 地图未显示在 Phonegap Build 中

    我的电话间隙期只有两个月左右 我一直在谷歌波纹模拟器中测试该应用程序 并且谷歌地图的一切都运行良好 但是 当我将此项目上传到phonegap build 并将其安装到我的Android 设备中时 谷歌地图不会显示 这是我的index htm
  • JQuery,从字符串中删除元素

    我有一个字符串 var s h1 heading h1 p para p 我想删除h1从中提取元素 我试过了 s remove h1 但 s 仍然包含h1元素 我也尝试过 s s remove h1 and h1 s remove and
  • 汇总每日内容

    我一直在尝试汇总 有些不稳定的 每日数据 我实际上正在处理 csv 数据 但如果我重新创建它 它看起来像这样 library zoo dates lt c 20100505 20100505 20100506 20100507 val1 l
  • Flutter 应用程序在直接调用 Firebase 云函数时出现 UNAUTHENTICATED 错误

    我尝试直接从我的 FLUTTER 应用程序使用 firebase 云函数 oncall 方法 即使我登录了 它仍然给我一个未经身份验证的错误 颤振应用程序代码 CloudFunctions function CloudFunctions i
  • MySQL - 删除级联上的外键 - 是否有定义的执行顺序?

    我的 MySQL 有问题 多个表上的 CASCADE ON DELETE 规则 显然 CASCADE ON DELETE 规则的执行顺序取决于它们的定义顺序 但是这个执行顺序是否明确定义或者取决于 MySQL 版本 这是我的三个表 A B