我正在尝试使用PHP为我的家庭预算应用程序设计数据库结构。 在设置外键时,我遇到了一个问题。
我有3张桌子:
日志(id,日期,tranTypeID,categoryID,描述,值,isForecast)
类别(id,categoryName)
transactiontype(id,transactionTypeName)
日志-主要预算记录
category-日志记录的固定类别列表
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
,CONSTRAINTfk_log_category
外键(categoryID
)参考{{1 }}(category
)
我确实将所有表引擎都设置为InnoDB,并且所有相关列都设置了完全相同的数据类型。
答案 0 :(得分:0)
可能是您的log
表中有记录,而categoryID
在cateogry
表中不存在。创建外键之前,您需要更新或删除这些记录。
您可以使用以下查询找到有问题的记录:
SELECT DISTINCT categoryID
FROM log l LEFT JOIN category c ON c.id = l.categoryID
WHERE c.id IS NULL;