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;)
我认为你的外键约束中有一个拼写错误,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)
我有同样的问题,并没有错误的关系名称.
我遇到了不同记录的问题,即尝试注册另一个表中不存在的记录,因此生成了此错误.
检查该记录是否存在于另一个表中以插入正确的关系,否则会出现此错误.
希望这对你有所帮助.