当前位置: 首页 > 知识库问答 >
问题:

即使存在键,Mysql ForeignKey约束也失败

蒋奕
2023-03-14

我在Amazon RDS上的mysql DB8.0.20版本中有两个表,它们之间有一个外键。

当我尝试插入第二个表时,我得到一个外键错误,但我确定第一个表中存在该键。

SELECT id_column FROM db.table1 WHERE id_column='123';
+------------+
| id_column  |
+------------+
| 123        |
+------------+
1 row in set (0.00 sec)

然后我跑:

INSERT INTO db.table2 (foreign_id, ...) VALUES ('123', ...);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`db`.`table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`foreign_id`) REFERENCES `table1` (`id_column`))

那么,如果ID存在于表1中,为什么表2不能在外键列中使用它呢?我错过了什么?

共有1个答案

顾永福
2023-03-14

请确保所有这些操作的数据类型匹配:

  • 创建两个表。
  • 创建外键及其索引
  • 在两个表中插入行。
 类似资料:
  • 问题内容: 刚在Mac OS X 10.6上安装了MySQL 5.5,并且在许多表上都有一个奇怪的问题。下面是一个例子。插入行失败,但不应插入外键约束。它引用的外键确实存在。有任何想法吗? 更新 :多次删除并重新创建数据库后,我在上述插入失败后进行了操作,并得到了令人惊讶的结果。找不到父语言表!这似乎很奇怪…有什么想法吗? 更新2 :事实证明,这只是MySQL中的一个 巨大 错误。显然,最新版本的

  • 我是mySQL的新手,在学习连接的同时,我尝试使用左连接、右连接和完全外部连接来创建一个完全连接。然后我意识到我的一个原始表(表t2)有一个空行。 当尝试删除它时,我得到错误:错误代码:1175。您正在使用安全更新模式,并且试图更新一个没有使用键列禁用安全模式的WHERE的表,请在Preferences->SQL Editor中切换该选项并重新连接。 更新:当我使用MySQL命令行时,我没有看到空

  • 问题内容: 我收到此错误消息: 第40行的错误1217(23000):无法删除或更新父行:外键约束失败 …当我尝试放置桌子时: …定义如下: 有趣的是, 我已经删除 了模式中具有外键的 所有其他表。实际上,除了表外,数据库是空的。 如果数据库中没有其他对象,怎么可能会有子行?据我所知,InnoDB不允许在其他模式上使用外键,对吗? (我什至可以运行命令:-?) 问题答案: 两种可能性: 在另一个架

  • 嗨,我知道有人问过这个问题,但我还没有找到正确的答案,为什么当我尝试做我的第二个插入: 我得到了错误: 错误1452(23000):无法添加或更新子行:外键约束失败(.,约束外键()引用()) 下面的DDL代码:

  • 我使用CORS请求将数据发布到不同域上的php脚本。我收到错误: 跨域请求被阻止:同源策略不允许读取“mydomain”处的远程资源(原因:缺少CORS标头“Access-Control-Allow-Origin”)。 我已经使用以下代码在php中设置了标题。 我也在这篇文章中尝试了这个代码 这是供参考的javascript代码 响应标题 请求标头 但我运气不好任何帮助我都很感激

  • 我正在做一个基本的例子来测试级联删除操作,但我得到了异常。这是我的实体