gpt4 book ai didi

MySQL 约束未正确添加

转载 作者:行者123 更新时间:2023-11-29 13:50:38 26 4
gpt4 key购买 nike

多年来我从来没有像我应该使用的那样使用约束,并且我正在尝试开始这样做。我有一个简单的查找表,将服装 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 索引(当有存在约束)。这是我运行更改表查询以尝试添加约束后服装颜色表的样子:

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 ;

有人可以告诉我我做错了什么以及为什么它不会添加约束吗?提前致谢。

最佳答案

为了使外键发挥作用,所有涉及的表都必须具有 Innodb 引擎。只有一个表是 Innodb,而其他表是 MyISAM - 这将不起作用(在 MySQL documentation 中了解更多相关信息)。

简单的解决方案是将所有表更改为 Innodb 格式。

关于MySQL 约束未正确添加,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16729924/

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