我有一个包含2个条目的表。
像
这样的东西CREATE TABLE `db`.`main` (
`id` int(10) unsigned NOT NULL,
PRIMARY KEY (`id`)
);
这两个条目的ID是自动生成的主键。
我有另一张表格,其中包含一条链接
的规则CREATE TABLE `db`.`day` (
`main_id` int(10) unsigned NOT NULL,
`day` tinyint(4) NOT NULL,
CONSTRAINT `fk_db_main` FOREIGN KEY (`main_id`) REFERENCES `main` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
);
现在我可以使用
成功获得结果SELECT * FROM main where id='9';
但是当我尝试运行时
INSERT INTO day (main_id, day) VALUES (9, 0);
我得到了
“无法添加或更新子行:外键约束失败(db
。day
,CONSTRAINT fk_db_main
FOREIGN KEY(main_id
)参考{{1} }(main
)ON DELETE NO ACTION ON UPDATE NO ACTION)(1452)“
有关插件缺少什么的任何建议吗?
**在提问时我没有列出问题的实际原因。实际原因是主数据库表在MyISAM中,并且InnoDB表无法创建连接到它的外键。简而言之,MyISAM不支持外键,即使它们来自其他表。
答案 0 :(得分:2)
如果我删除db.
语句中的CREATE TABLE
部分(并插入main
行id
为9),则该插页适用于我。也许问题是您使用db.
前缀不一致,即在TABLE
之后但在CONSTRAINT
条款中没有...?
答案 1 :(得分:1)
FOREIGN KEY约束说“在'main`表中应该有一个条目,其ID值与'day'表中新插入的'main_id'值匹配。”
当您将值9插入'day'时,ID为9的'main'中是否有一行?
DBMS不这么认为 - 这就是它抱怨的原因。
答案 2 :(得分:0)
在提问时我没有列出问题的实际原因。实际原因是主数据库表在MyISAM中,并且InnoDB表无法创建连接到它的外键。简而言之,MyISAM不支持外键,即使它们来自其他表。