【问题标题】:MySQL: Cannot add a foreign keyMySQL:无法添加外键
【发布时间】:2017-05-10 09:51:02
【问题描述】:

我最近将一些表移到了一个新数据库中。我让这些表的外键指向旧数据库中的表。

然后我创建了引用表的新版本。我首先尝试修改 FK,以便它们指向新的引用。那没有用,所以我放弃了所有旧的 FK 并尝试创建新的 FK。第一阶段顺利进行。第二阶段虽然每张桌子都失败了,以同样的方式!响应总是这样:

ERROR 1452: Cannot add or update a child row: a foreign key constraint fails (`ml`.`#sql-d04_2`, CONSTRAINT `FK_excoeff_secID` FOREIGN KEY (`SecurityID`) REFERENCES `securities` (`SecurityID`))    

故障立即出现,并且似乎与实际数据无关。在报错信息中,如你所见,表名通常所在的地方现在被一个奇怪的字符串填充了。而且无论引用表是什么,错误都包含 same 字符串。

所有这些都发生在 MySQL WorkBench 的“Alter table”部分,但也作为常规 SQL 查询。

我哪里做错了???

【问题讨论】:

  • 不,不是。主要区别在于 1) 表名所在的奇怪字符串。它必须意味着什么,并且 2) 它是我尝试向它们添加 FK 的所有表的 same “表名”。 3) 所有表数据 由等效的外键管理。数据没有冲突!

标签: mysql foreign-keys mysql-workbench


【解决方案1】:

先生。 Peter Brawly,in the MySQL forums 非常有帮助。他的回答是:

  1. “奇怪的字符串”只是内部使用的临时表的名称
  2. 失败的原因可能是旧式的 - 违反了数据中的参照完整性。他是对的!
  3. 检测罪魁祸首的 SQL 查询是:

    选择不同的 c.ID FROM child_table AS c LEFT JOIN parent_table AS p USING(ID) 其中 p.ID 为空;

【讨论】:

    猜你喜欢
    • 2013-02-26
    • 2016-03-01
    • 2013-03-10
    • 2021-11-05
    • 2021-11-12
    相关资源
    最近更新 更多