我在MySQL 5.6.11中创建了两个表,如下所示,通过MySQL Workbench 5.2.47。
country
表:
delimiter $$
CREATE TABLE `country` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`country_name` varchar(45) DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INC
REMENT=2 DEFAULT CHARSET=utf8$$
state_table
:
delimiter $$
CREATE TABLE `state_table` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`state_name` varchar(45) DEFAULT NULL,
`country_id` int(11) DEFAULT NULL,
PRIMARY KEY (`id`),
CONSTRAINT `country_fk` FOREIGN KEY (`id`) REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 COMMENT=''$$
country
表中有一行id
1.它只允许一个(子)行插入其子表state_table
。如果尝试更多行,则会发生以下错误。
错误1452:无法添加或更新子行:外键约束 失败(
social_networking
。state_table
,CONSTRAINTcountry_fk
FOREIGN KEY(id
)REFERENCEScountry
(id
)ON DELETE CASCADE ON 更新CASCADE)
SQL语句:
INSERT INTO `social_networking`.`state_table` (`id`, `state_name`, `country_id`) VALUES ('2', 'xxx', '1')
实际上,我正在尝试使用ORM(JPA)映射这些表,我总是只看到OneToOne
关系。
我错过了什么?
答案 0 :(得分:10)
好吧,我找到答案,解决方案,我的英语不是很好,但我认为可以解释你。我尝试创建一个触发器后得到此错误,我的数据库是在phpmyadmin中创建的,这个错误让我发疯,问题是我在创建触发器之前,我在表格中加载了大量数据,并在我的孩子身上table是我父表中没有匹配的一些数据,ej:我的子表“chat”有一个“id_jugador = 1”,在我的父表中没有那个“id_jugador”,这是我的错误,希望能有所帮助你,阿根廷Rulz;)
答案 1 :(得分:9)
我认为你的外键约束中有一个拼写错误,country_id
应该是country
的外键。当id
是外键时,您只能插入一行,因为它恰好得到id = 1,它与国家/地区中的行具有相同的ID;
CONSTRAINT `country_fk` FOREIGN KEY (`id`)
REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
应该是
CONSTRAINT `country_fk` FOREIGN KEY (`country_id`)
REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
答案 2 :(得分:5)
我有同样的问题,关系名称没有错 我遇到了不同记录的问题,即尝试注册另一个表中不存在的记录,从而产生了这个错误 检查该记录是否存在于另一个表中以插入正确的关系,否则会出现此错误。
希望这对你有所帮助。
答案 3 :(得分:1)
example:
table1(
id1 INT PRIMARY KEY,
name1 VARCHAR(50)
)
table2(
id2,<--- want to add FOREIGN KEY to this field
name2 VARCHAR(50)
)
在添加约束外键之前,您必须在id1
和id2
之间使用正确的值,因此您应该使用相互映射的值更新该ID字段。
答案 4 :(得分:0)
如果您有实时数据,请检查所有列值。
即。如果你有&#39; x&#39; - &gt;表作为主要的一个表&#39;&#39; - &gt;列和&#39; y&#39; - &gt;表作为辅助表&#39 ; b&#39; - &gt;列,然后&#39;&#39; - &gt;列中的所有值必须存在于&#39; - &gt;列中,如果&#39中存在任何值; b&#39; - &gt;列并且不存在于&#39; - &gt;列中,然后它会给出这样的错误..
希望这有帮助..对于新手..