mysql中带外键约束的insert建议

mysql中带外键约束的insert建议,sql,mysql,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 `

我有一个包含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
,约束
fk\u db\u main
外键(
main\u id
)引用
main
id
)在删除时不操作在更新时不操作)(1452)”

关于我在插入中遗漏的内容,有什么建议吗


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

外键约束表示“在'main'表中应有一个ID值与'day'表中新插入的'main_ID'值匹配的条目”

将值9插入“day”时,“main”中是否已经有ID=9的行


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

外键约束说“在'main'表中应该有一个ID值与'day'表中新插入的'main_ID'值匹配的条目”

将值9插入“day”时,“main”中是否已经有ID=9的行



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

如果我删除
CREATE TABLE
语句中的
db.
部分(并在
main
中插入一行
id
为9),则插入对我有效。可能问题是您使用的
db.
前缀不一致,即在
TABLE
之后,而不是在
CONSTRAINT
子句中…?

如果我删除
db.
CREATE TABLE语句中的
部分(并在
main
中插入一行
id
为9),插入对我有效. 可能问题是您使用的
db.
前缀不一致,即在
之后,但不在
约束
子句中…?

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

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

insert语句看起来不错。我很困惑,您是否认为“main”表中有两个“entries”。按照我的想法,有一列叫做ID,它也是表的主键。另外,为什么在SELECT中引用“9”?当你运行SELECT时你得到了什么结果?我得到了一个9。引用没有任何区别,这只是我无法解决问题时碰巧正在测试的东西。还没有解决方案,因为我不理解问题。(sql在没有约束的情况下工作,因此我现在将在软件中执行健全性检查。我删除了短期约束,这将让我继续。insert语句看起来很好。我很困惑,您是否认为“main”表中有两个“entries”。按照我的想法,有一列名为ID,它也是pr表的imary键。还有,为什么在SELECT中引用“9”?运行SELECT时会得到什么结果?我得到一个9。引号没有任何区别,只是我在无法找出问题时碰巧正在测试的东西。还没有解决方案,因为我不了解问题。(sql在没有约束的情况下工作,因此我现在将在软件中执行健全性检查。我短期内删除了约束,这将让我继续。+1是的,我建议您仔细检查您正在查询的数据库。您是说,如果触发器所依赖的数据不存在,则创建触发器不会导致问题吗?我必须调查一下。+1是的,我想建议仔细检查您正在查询的数据库。您是说如果触发器所依赖的数据不存在,那么创建触发器不会导致问题吗?我必须调查一下。是的,从main中选择值9的id,其中id等于9,返回9。好的,那么我认为Alex Martelli在正确的轨道上。除了名为
db
main
的表之外,还有一个名为
main
的表,并且您的外键没有引用您认为是的表。是的,从main中选择值9的id(id等于9)返回9。好的-那么我认为Alex Martelli在正确的轨道上。有一些错误她的表名为
main
,而不仅仅是名为
db
main
,并且您的外键没有引用您认为是的表。