Ошибка внешнего ключа MySQL даже с существующими ссылками - PullRequest
2 голосов
/ 03 мая 2011

Я провел некоторые поиски по этой проблеме, прежде чем размещать здесь.Вот проблема:

mysql> insert into Buyer values (5594, CURDATE(), 490, 4830);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`oppminer`.`buyer`, CONSTRAINT `FK3D9119337C53076` FOREIGN KEY (`office_id`) REFERENCES `Office` (`id`))

Я подтвердил, что указанная строка существует:

mysql> select * from Office where id = 490;
+-----+-----------+-----------+-------------+-------------------+
| id  | name      | agency_id | location_id | primaryContact_id |
+-----+-----------+-----------+-------------+-------------------+
| 490 | Top Level |        88 |        7363 |               451 |
+-----+-----------+-----------+-------------+-------------------+
1 row in set (0.00 sec)

Вот описание таблицы:

| Buyer | CREATE TABLE `Buyer` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `created` datetime DEFAULT NULL,
  `office_id` bigint(20) DEFAULT NULL,
  `primaryContact_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK3D9119337C53076` (`office_id`),
  KEY `FK3D911938ADC7080` (`primaryContact_id`),
  CONSTRAINT `FK3D911938ADC7080` FOREIGN KEY (`primaryContact_id`) REFERENCES `Contact` (`id`),
  CONSTRAINT `FK3D9119337C53076` FOREIGN KEY (`office_id`) REFERENCES `Office` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=5595 DEFAULT CHARSET=latin1 |
+-------

| Office | CREATE TABLE `Office` (
  `id` bigint(20) NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `agency_id` bigint(20) DEFAULT NULL,
  `location_id` int(11) DEFAULT NULL,
  `primaryContact_id` bigint(20) DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `FK8C9C2ADC3FBD3FD6` (`agency_id`),
  KEY `FK8C9C2ADCFF56D2BF` (`location_id`),
  KEY `FK8C9C2ADC8ADC7080` (`primaryContact_id`),
  CONSTRAINT `FK8C9C2ADC8ADC7080` FOREIGN KEY (`primaryContact_id`) REFERENCES `Contact` (`id`),
  CONSTRAINT `FK8C9C2ADC3FBD3FD6` FOREIGN KEY (`agency_id`) REFERENCES `Agency` (`id`),
  CONSTRAINT `FK8C9C2ADCFF56D2BF` FOREIGN KEY (`location_id`) REFERENCES `Location` (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=491 DEFAULT CHARSET=latin1 |
+--------

Я такжеисследовал индексы таблицы:

------------------------
LATEST FOREIGN KEY ERROR
------------------------
110503 12:32:12 Transaction:
TRANSACTION 17A89, ACTIVE 0 sec, OS thread id 4493770752 inserting
mysql tables in use 1, locked 1
1 lock struct(s), heap size 376, 0 row lock(s), undo log entries 1
MySQL thread id 17, query id 31610 localhost root update
insert into Buyer values (5594, CURDATE(), NULL, 4830)
Foreign key constraint fails for table `oppminer`.`buyer`:

  CONSTRAINT `FK3D911938ADC7080` FOREIGN KEY (`primaryContact_id`) REFERENCES `Contact` (`id`)
Trying to add to index `FK3D911938ADC7080` tuple:
DATA TUPLE: 2 fields;
 0: len 8; hex 80000000000012de; asc         ;;
 1: len 4; hex 800015da; asc     ;;

But the parent table `oppminer`.`Contact`
or its .ibd file does not currently exist!

У меня есть две машины, на которые я восстановил один и тот же дамп.На рабочем компьютере я могу успешно выполнить ту же команду, которая вызывает ошибку на проблемном компьютере.Есть идеи, переполнение стека?

1 Ответ

1 голос
/ 07 июня 2011

Это также было исправлено в недавно выпущенном (31 мая) MySQL 5.5.13:
Сбой ограничения внешнего ключа MySQL 5.5 при наличии внешнего ключа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...