MySQL проблема, чтобы добавить FOREIGN KEY? - PullRequest
0 голосов
/ 17 июля 2011

У меня есть 2 таблицы innodb, вот с запросом SHOW CREATE TABLE:

| top_menu | CREATE TABLE `top_menu` (
  `t_id` mediumint(8) unsigned NOT NULL AUTO_INCREMENT,
  `menu_photo` char(128) NOT NULL,
  `title` char(64) NOT NULL,
  `atdc_id` int(10) unsigned NOT NULL,
  `menu_order` mediumint(8) unsigned NOT NULL,
  PRIMARY KEY (`t_id`)
) ENGINE=InnoDB AUTO_INCREMENT=8 DEFAULT CHARSET=utf8 |

| attendance | CREATE TABLE `attendance` (
  `atdc_id` int(10) unsigned NOT NULL AUTO_INCREMENT,
  `title` char(128) NOT NULL,
  `content` text,
  `price` double NOT NULL,
  `sale_percent` tinyint(3) unsigned NOT NULL,
  `atdc_order` int(10) unsigned NOT NULL,
  `s_id` int(10) unsigned NOT NULL,
  PRIMARY KEY (`atdc_id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 |

Результатом обычного добавления FOREIGN KEY является ошибка.Запрос: ALTER TABLE top_menu ADD FOREIGN KEY (atdc_id) REFERENCES attendance(atdc_id); Ошибка: ОШИБКА 1452 (23000): невозможно добавить или обновить дочернюю строку: ограничение внешнего ключа не выполнено (database., CONSTRAINT #sql-a36a_5c109d2_ibfk_1 FOREIGN KEY (atdc_id) ССЫЛКИ attendance (atdc_id))

Что мне с этим делать?У меня это всегда хорошо работало.

Ответы [ 2 ]

2 голосов
/ 17 июля 2011

Кажется, что в некоторых строках top_menu есть atdc_id, которого нет в таблице посещаемости.

0 голосов
/ 17 июля 2011

в дополнение к @Alexey Smirnoff answer: Когда вы добавляете внешний ключ?Если это из сценария восстановления, убедитесь, что у вас загружено содержимое таблицы attendance перед выполнением этого запроса.Или отложите проверку внешнего ключа до конца процесса.

Если вы хотите узнать, какие строки вызывают эту проблему, запустите этот запрос:

Select a.* 
from top_menu a
left join attendance b
on a.atdc_id = b.atdc_id
where b.atdc_id IS NULL;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...