6

我通过 MySQL Workbench 5.2.47 在 MySQL 5.6.11 中创建了两个表,如下所示。

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表中有 1 行id。它只允许将一个(子)行插入其子表中state_table。如果尝试更多行,则会发生以下错误。

错误 1452:无法添加或更新子行:外键约束失败 ( social_networking. state_table, CONSTRAINT country_fk FOREIGN KEY ( id) REFERENCES country( id) ON DELETE CASCADE ON UPDATE CASCADE)

SQL 语句:

INSERT INTO `social_networking`.`state_table` (`id`, `state_name`, `country_id`) VALUES ('2', 'xxx', '1')

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

我错过了什么?

4

5 回答 5

12

好吧,我找到了答案,解决方案,我的英语不是很好,但我想可以解释你。尝试创建触发器后出现此错误,我的数据库是在 phpmyadmin 中创建的,这个错误让我抓狂,问题是我在创建触发器之前,在我的表和我的孩子中加载了很多数据表是一些在我的父表中不匹配的数据,ej:我的子表“聊天”有一个“id_jugador = 1”,而在我的父表中没有那个“id_jugador”,这是我的错误,我希望有所帮助你,阿根廷鲁尔茨 ;)

于 2013-06-20T15:16:27.377 回答
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

一个用于测试的 SQLfiddle

于 2013-05-08T17:56:33.607 回答
5

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

希望这对您有所帮助。

于 2014-02-06T18:47:41.083 回答
1
example:
 table1(
    id1 INT PRIMARY KEY,
    name1 VARCHAR(50)
 )
 table2(
    id2,<--- want to add FOREIGN KEY to this field
    name2 VARCHAR(50)
 )

在添加约束外键之前,您必须在id1and之间具有正确的值id2,因此您应该使用相互映射的值更新该 id 字段。

于 2014-02-27T16:06:14.973 回答
-1

可能的解决方案

如果您有实时数据,请检查所有列值。

即如果你有'x'->table 作为主要的有'a'->column 和'y'->table 作为次要的'b'->column,那么'b'->column 中的所有值必须存在于'a'->column 如果任何值存在于 'b'->column 并且不存在于 'a'->column 那么它将给出这样的错误..

希望这对新手有帮助..

于 2015-12-29T12:16:02.763 回答