mysqli:无法创建多对多表?

mysqli:无法创建多对多表?,mysql,foreign-keys,Mysql,Foreign Keys,我有3张桌子。一个是配料。另一个用于用餐,最后一个用于两者之间的连接参考。然而,每次我尝试为“fine_fk”设置外键时,我都没有得到定义的索引错误,即使据我所知,它已被索引,或者我将其属性设置为indexed。那么我做错了什么 编辑:餐桌 配料 Table Create Table ingredients CREATE TABLE `ingredients` ( `ingredient_id` int(6) unsigned NOT NULL AUTO_INCRE

我有3张桌子。一个是配料。另一个用于用餐,最后一个用于两者之间的连接参考。然而,每次我尝试为“fine_fk”设置外键时,我都没有得到定义的索引错误,即使据我所知,它已被索引,或者我将其属性设置为indexed。那么我做错了什么

编辑:餐桌

配料

Table   Create Table    
ingredients     CREATE TABLE `ingredients` (
 `ingredient_id` int(6) unsigned NOT NULL AUTO_INCREMENT,
 `quanity` int(6) NOT NULL,
 `package` int(6) NOT NULL,
 `item` varchar(50) DEFAULT NULL,
 `cost` decimal(18,2) DEFAULT NULL,
 `store` varchar(50) DEFAULT NULL,
 `reg_date` timestamp NULL DEFAULT NULL,
 PRIMARY KEY (`ingredient_id`)
) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4
膳食

联合配料餐

Table   Create Table    
junction_ingredients_meals  CREATE TABLE `junction_ingredients_meals` (
 `junction_id` int(6) NOT NULL,
 `ingredient_fk` int(6) NOT NULL,
 `meal_fk` int(6) NOT NULL,
 PRIMARY KEY (`junction_id`),
 KEY `ingredient_fk` (`ingredient_fk`,`meal_fk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4

啊,我明白了,引用字段需要与引用字段的类型完全相同(除非即使引用的字段不是空的,它们也可以为空)。你的问题是你引用的字段是
unsigned int
,而你引用的字段是
int

,因此,我没有看到餐食表的图像…它表明索引不存在(我正在查找餐食表的主键)由于您为杂货店提供的屏幕截图没有显示我可以看到的表的主键或索引…请将
show CREATE TABLE TABLE name
的输出显示为纯文本,而不是图像。我将其添加到了用餐表中。Barmar:对不起,我是新来用php学习mysqli的。这是我的第二天。我不明白你所说的“显示创建餐桌食材”是什么意思。他指的是运行以下查询:
show create table founds
show create table components
,等等。。。然后发布这些结果,而不是图片。好的,我找到了在哪里做,并将其添加到我的帖子中。
Table   Create Table    
junction_ingredients_meals  CREATE TABLE `junction_ingredients_meals` (
 `junction_id` int(6) NOT NULL,
 `ingredient_fk` int(6) NOT NULL,
 `meal_fk` int(6) NOT NULL,
 PRIMARY KEY (`junction_id`),
 KEY `ingredient_fk` (`ingredient_fk`,`meal_fk`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4