Это, вероятно, происходит от нехватки знаний или банальной глупости, но я хотел бы понять, как создавать внешние ключи в таблице перекрестных ссылок:
Например, У меня есть две таблицы, элемент и изображение
CREATE TABLE `item` (
`id` INT(11) UNSIGNED PRIMARY KEY AUTO_INCREMENT,
`name` VARCHAR(30) NOT NULL,
`description` MEDIUMTEXT
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
CREATE TABLE `image` (
`id` INT(11) UNSIGNED AUTO_INCREMENT,
`file` VARCHAR(255) UNIQUE NOT NULL,
`caption` VARCHAR(255),
PRIMARY KEY(`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Я хочу сослаться на любое изображение на любой элемент, поэтому я создаю таблицу перекрестных ссылок следующим образом:
CREATE TABLE `item_image` (
`item` INT(11) UNSIGNED NOT NULL,#foreign key
`img` INT(11) UNSIGNED NOT NULL,#foreign key
PRIMARY KEY(`item`,`img`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Но таблица item_image содержит столбцы, которые являются внешними ключами, поэтому я пытаюсь ограничивайте их вот так
CREATE TABLE `item_image` (
`item` INT(11) UNSIGNED NOT NULL,
`img` INT(11) UNSIGNED NOT NULL,
PRIMARY KEY(`item`,`img`),
FOREIGN KEY(`item`)
REFERENCES `item` (`id`)
ON DELETE CASCADE,
FOREIGN KEY(`img`)
REFERENCES `image` (`id`)
ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Так что, если изображение или элемент будут удалены, база данных также удалит перекрестную ссылку.
Я прочитал много ресурсов в Интернете и stackoverflow, и мне часто говорят, что не должно быть проблем с выполнением того, что я хочу. Определение нескольких внешних ключей в одной таблице для многих таблиц
, но MySQL выдает эту общую ошибку
Код ошибки: 1005. Не удается создать таблицу 'test.item_image' (номер ошибки: 150)
I нужна помощь, чтобы понять, на что именно жалуется MySQL.
Изменить:
Я выполняю запросы в MySQL Workbench 5.2.39 CE, если это имеет значение...
Версия MySQL: 5.5.16