【问题标题】:SQLyog creating foreign key errorSQLyog 创建外键错误
【发布时间】:2017-04-19 13:16:29
【问题描述】:

我在执行此查询时遇到关于 SQLyog 外键关系创建的问题:

错误:

无法添加或更新子行:外键约束失败 (zestagio.#sql-6dc_4b6151,约束FK_CARRO外键 (CARRO) 参考资料km_carro (IDCARRO))

MySQL 查询:

ALTER TABLE `zestagio`.`km_colaboradores`   
  ADD COLUMN `CARRO` int(11) NOT NULL after `TIPO`,
  ADD CONSTRAINT `FK_CARRO` FOREIGN KEY (`CARRO`) REFERENCES `zestagio`.`km_carro`(`IDCARRO`)

【问题讨论】:

  • km_carro(IDCARRO) 列是否声明为主键?
  • 是的,当我创建其他外键时,它没有给我任何错误。就这一个,我不知道为什么。
  • 请为km_carrokm_colaboradores 发布SHOW CREATE TABLE。见14.7.5.10 SHOW CREATE TABLE Syntax
  • 存在问题是因为我插入了以前的数据,并且它不允许我创建外键,直到表 km_colaboradores 上没有数据。无论如何感谢您的帮助!

标签: mysql foreign-keys


【解决方案1】:

错误信息只是表示您在km_colaboradores 表中的记录不满足FK_CARRO 外键设置的约束。

看到CARRO字段定义为intnot null,也没有指定默认值。该语句没有引发任何错误,但外键出现了错误,这表明未启用严格的 sql 模式。您可能已经在表中有数据,因此以这种方式添加 CARRO 字段会导致所有记录都设置为 0。在严格的 sql 模式下,这会导致错误消息,因此无法启用严格的 sql 模式。

但是,当您尝试添加外键时,MySQL 在km_carro 表中没有找到任何记录,其中IDCARRO 为0,因此现有记录打破了外键约束。

我建议暂时允许CARRO有空值,添加外键,根据需要更新CARRO值到合适的值,然后才不允许空值。

另一种选择是为CARRO 定义一个显式默认值,该值存在于IDCARRO 字段中。

【讨论】:

    猜你喜欢
    • 2015-04-28
    • 2013-08-22
    • 2012-07-01
    • 1970-01-01
    • 1970-01-01
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多