gpt4 book ai didi

mysql - MySQL InnoDB 表之间的外键不起作用...为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 11:10:33 25 4
gpt4 key购买 nike

我有以下表格:

物种(MyIsam)
图片 (InnoDB)
specie_map (InnoDB)

specie_map 表应将图像映射到物种,因此具有以下列:

物种编号
图片_id

都是 int 11,就像 specie 和 image 表的 id 列一样。我知道我不能在 specie_id 和 specie=>id 之间创建外键,因为 specie 表是 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;

最佳答案

外键仅适用于 mysql 中的 InnoDbMyISAM 不支持它们(语句被忽略)。

混合使用多个数据库引擎有什么原因吗?

关于mysql - MySQL InnoDB 表之间的外键不起作用...为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8960418/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com