在mysql中插入带外键约束的建议

时间:2009-05-30 02:46:49

标签: sql mysql

我有一个包含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);

我得到了

“无法添加或更新子行:外键约束失败(dbday,CONSTRAINT fk_db_main FOREIGN KEY(main_id)参考{{1} }(main)ON DELETE NO ACTION ON UPDATE NO ACTION)(1452)“

有关插件缺少什么的任何建议吗?

**在提问时我没有列出问题的实际原因。实际原因是主数据库表在MyISAM中,并且InnoDB表无法创建连接到它的外键。简而言之,MyISAM不支持外键,即使它们来自其他表。

3 个答案:

答案 0 :(得分:2)

如果我删除db.语句中的CREATE TABLE部分(并插入mainid为9),则该插页适用于我。也许问题是您使用db.前缀不一致,即在TABLE之后但在CONSTRAINT条款中没有...?

答案 1 :(得分:1)

FOREIGN KEY约束说“在'main`表中应该有一个条目,其ID值与'day'表中新插入的'main_id'值匹配。”

当您将值9插入'day'时,ID为9的'main'中是否有一行?

DBMS不这么认为 - 这就是它抱怨的原因。

答案 2 :(得分:0)

在提问时我没有列出问题的实际原因。实际原因是主数据库表在MyISAM中,并且InnoDB表无法创建连接到它的外键。简而言之,MyISAM不支持外键,即使它们来自其他表。