Сбой ограничения внешнего ключа MySQL - PullRequest
1 голос
/ 29 апреля 2011

Как это возможно:

mysql> select id from posts;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> select id from tags;
+----+
| id |
+----+
|  1 |
+----+
1 row in set (0.00 sec)

mysql> insert into pots_x_tags values(1,1);
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`posts_x_tags`, CONSTRAINT `posts_x_tags_ibfk_2` FOREIGN KEY (`tag_id`) REFERENCES `tag` (`id`) ON DELETE CASCADE)

Вот таблицы (многие ко многим):

CREATE TABLE `post_tag_map` (
  `post_id` int(11) NOT NULL,
  `tag_id` int(11) NOT NULL,
  PRIMARY KEY (`post_id`,`tag_id`),
  FOREIGN KEY (`post_id`) REFERENCES posts(`id`) ON DELETE CASCADE,
  FOREIGN KEY (`tag_id`) REFERENCES tag(`id`) ON DELETE CASCADE
)  
CREATE TABLE `tags` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `tag` varchar(255) NOT NULL,
  PRIMARY KEY (`id`),
  UNIQUE (`tag`)
)
CREATE TABLE `posts` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) CHARACTER SET latin1 NOT NULL,
  `body` text CHARACTER SET latin1,
  PRIMARY KEY (`id`)
)

1 Ответ

2 голосов
/ 29 апреля 2011

На первый взгляд может показаться, что внешний ключ в столбце post_tag_map.tag_id указывает на таблицу с именем tag, а не на таблицу с именем tags.

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