mysql中带外键约束的insert建议
我有一个包含2个条目的表 差不多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 `
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
,并且您的外键没有引用您认为是的表。