多年来,我从来没有像我应该使用的那样使用约束,我正试图开始这样做。我有一个简单的查找表,将服装 ID 和颜色 ID 关联起来。如果服装或颜色被删除,我显然希望删除关联。这是我的表结构:
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;
查询成功运行,但是当我对底部附近的所有表进行可视导出时,我看不到我的新约束(只是现有的约束),并且服装颜色表显示了两个 fk 索引(当存在约束时,这不是典型的地方)。这是我运行 alter table 查询以尝试添加约束后服装颜色表的样子:
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 ;
有人可以告诉我我做错了什么以及为什么它不会添加约束吗?提前致谢。