Я никогда не использовал ограничения, как я должен был быть на протяжении многих лет, и я пытаюсь начать делать это. У меня есть простая таблица поиска, которая касается идентификаторов одежды и цветовых идентификаторов. Я, очевидно, хочу, чтобы ассоциации были удалены, если либо предмет одежды, либо цвет удалены. Вот мои структуры таблиц:MySQL Constraint не добавляет правильно
CREATE TABLE IF NOT EXISTS `colors` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(255) NOT NULL DEFAULT '',
`image` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
KEY `name` (`name`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;
CREATE TABLE IF NOT EXISTS `garments` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`image` varchar(255) NOT NULL DEFAULT '',
PRIMARY KEY (`id`),
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=50 ;
CREATE TABLE IF NOT EXISTS `garments_colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`garment_id` int(11) unsigned NOT NULL,
`color_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=100 ;
Ограничение Я пытаюсь добавить следующий:
ALTER TABLE `garments_colors`
ADD CONSTRAINT `garments_colors_ibfk_1` FOREIGN KEY (`garment_id`) REFERENCES `garments` (`id`) ON DELETE CASCADE,
ADD CONSTRAINT `garments_colors_ibfk_2` FOREIGN KEY (`color_id`) REFERENCES `colors` (`id`) ON DELETE CASCADE;
Запрос выполняется успешно, но когда я делаю визуальный экспорт всех моих таблиц вблизи дна я не вижу моего нового ограничения (только существующие), а таблица garments_colors имеет два индекса fk, показывающих (что не типично, когда есть ограничение на месте). Вот что таблица одежды цвета выглядит как после того, как я запускаю альтер запрос таблицы, чтобы попытаться добавить ограничение:
CREATE TABLE IF NOT EXISTS `garments_colors` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`garment_id` int(11) unsigned NOT NULL,
`color_id` int(11) unsigned NOT NULL,
PRIMARY KEY (`id`),
KEY `garments_colors_ibfk_1` (`garment_id`),
KEY `garments_colors_ibfk_2` (`color_id`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=100 ;
Может кто-то пожалуйста, скажите мне, что я делаю не так и почему это обыкновение добавить ограничение? Заранее спасибо.
Спасибо @mvp. Я дам это выстрел и отчитаю. – pogeybait
Теперь я получаю ужасный # 1005 - Не могу создать таблицу xxxxxx. # Sql-43df_22068 '(errno: 150). Предложения? – pogeybait
Эта ошибка может возникнуть, если вы создаете FK для таблицы, которая еще не существует, или индекс, который ссылается на FK, еще не создан. Я предлагаю отредактировать ваш вопрос, чтобы предоставить дополнительную информацию - мы не можем читать ваши мысли. – mvp