У меня есть следующие таблицы:Внешний ключ между таблицами MySQL InnoDB не работает ... почему?
породы (MyISAM)
изображения (ЬшоВВ)
specie_map (ЬшоВВ)
В таблице specie_map следует отобразить изображение на монете, и, следовательно, имеет следующие столбцы:
specie_id
image_id
Оба INT 11, так же, как Ид столбцов звонкой и графических таблиц. Я знаю, что не могу создать внешний ключ между specie_id и specie => id, так как таблица видов - таблица MyIsam. Тем не менее, я ожидаю, что возможно создать внешний ключ между image_id и image => id.
Я могу создать этот внешний ключ, и он сохранит его, однако действие CASCADE, которое я связал с ним, не работает. Когда я удаляю изображение, он не удаляет запись specie_map, связанную с ней. Я ожидаю, что это сработает, поскольку этот внешний ключ находится между таблицами InnoDB. Оба столбца индексируются и имеют один и тот же тип данных.
Является ли это ограничением для MySQL, или я делаю что-то еще неправильно?
Обновление: в соответствии с этими определениями таблиц. Я отрезала несущественные столбцы:
-- ----------------------------
-- Table structure for `image`
-- ----------------------------
DROP TABLE IF EXISTS `image`;
CREATE TABLE `image` (
`id` int(11) NOT NULL auto_increment,
`guid` char(36) default NULL,
`title` varchar(255) NOT NULL,
`description` text,
`user_id` int(11) NOT NULL,
`item_id` int(11) default NULL,
`date_uploaded` timestamp NOT NULL default '0000-00-00 00:00:00',
`date_created` timestamp NOT NULL default '0000-00-00 00:00:00',
`date_modified` timestamp NOT NULL default '0000-00-00 00:00:00',
`status` enum('softdeleted','tobedeleted','active') default 'active',
PRIMARY KEY (`id`),
KEY `image_user` (`user_id`),
KEY `image_item` (`item_id`),
KEY `image_mod_by` (`moderated_by`),
CONSTRAINT `image_mod_by` FOREIGN KEY (`moderated_by`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
CONSTRAINT `image_user` FOREIGN KEY (`user_id`) REFERENCES `user` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COMMENT='stores image data (not file data)';
-- ----------------------------
-- Table structure for `specie`
-- ----------------------------
DROP TABLE IF EXISTS `specie`;
CREATE TABLE `specie` (
`id` int(11) NOT NULL auto_increment,
`name` varchar(256) NOT NULL,
`commonname` varchar(256) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM AUTO_INCREMENT=22 DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;
-- ----------------------------
-- Table structure for `specie_map`
-- ----------------------------
DROP TABLE IF EXISTS `specie_map`;
CREATE TABLE `specie_map` (
`id` int(11) NOT NULL auto_increment,
`image_id` int(11) NOT NULL,
`specie_id` int(11) NOT NULL,
`user_id` int(11) NOT NULL,
`karma` int(11) NOT NULL,
`date_created` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `image_id` (`image_id`),
KEY `specie_id` (`specie_id`),
CONSTRAINT `specie_map_ibfk_1` FOREIGN KEY (`image_id`) REFERENCES `image` (`id`) ON DELETE CASCADE ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
Показать определение трех таблиц - особенно «specie_map». –