Ошибка вставки внешнего ключа MySQL - PullRequest
2 голосов
/ 10 марта 2010

У меня есть 2 таблицы с составным внешним ключом между 2. Когда я пытаюсь вставить строку в дочернюю таблицу, я получаю ошибку ограничения, даже если значения существуют в родительской таблице.

Вот обзор родительской таблицы:

CREATE TABLE `residual_reports` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL DEFAULT '0000-00-00',
  `approved_on` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `posting_date_2` (`processor`,`posting_date`) USING BTREE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Дочерняя таблица имеет внешний ключ для столбцов процессора и даты проводки:

CREATE TABLE `residual_data` (
  `id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `mid` varchar(29) DEFAULT NULL,
  `processor` enum('1','2','3') NOT NULL,
  `posting_date` date NOT NULL,
  ......
  PRIMARY KEY (`id`),
  KEY `residual_data_ibfk_1` (`processor`,`posting_date`),
  CONSTRAINT `residual_data_ibfk_1` FOREIGN KEY (`processor`, `posting_date`) REFERENCES `residual_reports` (`processor`, `posting_date`) ON UPDATE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=latin1

Я вставил строку в таблицу residual_reports с процессором = 1 и posting_date = 2010-03-10.

Когда я пытаюсь вставить в таблицу residual_data с процессором = 1 и posting_date = 2010-03-10.

INSERT INTO `residual_data`(processor,posting_date) VALUES ('1','2010-03-10');

Я получаю:

[Err] 1452 - Невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполняется (residual_data, CONSTRAINT residual_data_ibfk_1 FOREIGN KEY (processor, posting_date) posting_date) ОБНОВЛЕНИЕ КАСКАДА)

Проверено, что значения определенно существуют в родительской таблице, но все еще появляются ошибки ограничения внешнего ключа. Что-то мне не хватает с составным внешним ключом?

Ответы [ 3 ]

2 голосов
/ 10 марта 2010

Я бы заподозрил ENUM, ты что-то делал с ними потом? Вы меняли значения или около того?

0 голосов
/ 10 марта 2010

Какую версию Mysql вы используете? Похоже, что у них были похожие проблемы с перечислением значений http://bugs.mysql.com/bug.php?id=24985

0 голосов
/ 10 марта 2010

Ваш код работает для меня как есть. Возможно ли, что изменения в residual_reports еще не зафиксированы?

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