错误1452:无法添加或更新子行:外键约束失败

Tin*_*iny 6 mysql mysql-workbench mysql-error-1452

我在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$$
Run Code Online (Sandbox Code Playgroud)

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=''$$
Run Code Online (Sandbox Code Playgroud)

country表中有一行带有id1.它只允许将一个(子)行插入其子表中state_table.如果尝试更多行,则会发生以下错误.

错误1452:不能添加或更新子行,外键约束失败(social_networking.state_table,约束country_fk 外键(id)参考country(id)ON DELETE CASCADE ON UPDATE CASCADE)

SQL语句:

INSERT INTO `social_networking`.`state_table` (`id`, `state_name`, `country_id`) VALUES ('2', 'xxx', '1')
Run Code Online (Sandbox Code Playgroud)

实际上,我正在尝试使用ORM(JPA)映射这些表,在那里我总是只看到OneToOne关系.

我错过了什么?

小智 11

好吧,我找到答案,解决方案,我的英语不是很好,但我认为可以解释你.尝试创建触发器后,我收到此错误,我的数据库是在phpmyadmin中创建的,这个错误让我发疯,问题是我在创建触发器之前,我在表格中加载了大量数据,在我的孩子身上table是我父表中没有匹配的一些数据,ej:我的子表"chat"有一个"id_jugador = 1",在我的父表中没有那个"id_jugador",这是我的错误,希望能有所帮助你,阿根廷Rulz;)


Joa*_*son 9

我认为你的外键约束中有一个拼写错误,country_id如果probaby是外键的话country.什么时候id是外键,你只能插入一行,因为它恰好得到id = 1,这个id与国家中的行相同;

CONSTRAINT `country_fk` FOREIGN KEY (`id`) 
    REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)

应该是

CONSTRAINT `country_fk` FOREIGN KEY (`country_id`) 
    REFERENCES `country` (`id`) ON DELETE CASCADE ON UPDATE CASCADE
Run Code Online (Sandbox Code Playgroud)

一个要测试的SQLfiddle.


Dan*_*rde 5

我有同样的问题,并没有错误的关系名称.
我遇到了不同记录的问题,即尝试注册另一个表中不存在的记录,因此生成了此错误.
检查该记录是否存在于另一个表中以插入正确的关系,否则会出现此错误.

希望这对你有所帮助.