【问题标题】:PHPMyAdmin Foreign Key Error - failed to add constraintPHPMyAdmin 外键错误 - 未能添加约束
【发布时间】:2019-06-04 01:47:06
【问题描述】:

我正在尝试用 PHP 为我的家庭预算应用程序设计一个数据库结构。 在设置外键时,我遇到了一个问题。

我有 3 张桌子:

日志(id、日期、tranTypeID、categoryID、描述、值、isForecast)
类别 (id, categoryName)
交易类型(id,交易类型名称)

日志 - 主要预算记录
类别 - 日志记录的固定类别列表
transactiontype - 目前只保存 2 条记录:费用、收入

我为 tranTypeID 设置了外键,没有失败。尝试对 categoryID 执行相同操作时:

ALTER TABLE `log` ADD  CONSTRAINT `fk_log_category` FOREIGN KEY (`categoryID`) REFERENCES `category`(`id`) ON DELETE RESTRICT ON UPDATE RESTRICT;

我收到以下错误:

1452 - 无法添加或更新子行:外键约束失败 (budget.#sql-1aac_349, CONSTRAINT fk_log_category FOREIGN KEY (categoryID) REFERENCES category (id)) H1>

我确实为 InnoDB 设置了所有表引擎,并且所有相关列都设置了完全相同的数据类型。

【问题讨论】:

    标签: mysql phpmyadmin foreign-keys


    【解决方案1】:

    您的log 表中可能存在categoryIDcateogry 表中不存在的记录。在创建外键之前,您需要更新或删除这些记录。

    您可以使用以下查询来查找违规记录:

    SELECT DISTINCT categoryID 
    FROM log l LEFT JOIN category c ON c.id = l.categoryID
    WHERE c.id IS NULL;
    

    【讨论】:

    • 我认为这是以前的情况,但我只是从日志表中删除了所有记录,因为它只有 3 行。目前的日志表是空的
    • @RobertJamborski : mm... 请更新您的问题并添加两个表的描述,例如 SHOW CREATE TABLE 的输出?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-04-05
    • 2020-09-14
    • 1970-01-01
    • 2014-11-17
    • 2019-12-31
    • 2013-08-07
    • 1970-01-01
    相关资源
    最近更新 更多