MySQL错误150外键约束形成错误



我正在尝试为productscategories创建一个名为product_categories的多对多关系表。

使用:MySQL,INNODB。ID是UUID4,使用char(36)作为ID字段。

create table product_categories
(
product_id  char(36) not null,
category_id char(36) not null,
primary key (product_id, category_id),
constraint fk_product_categories_category
foreign key (category_id) references categories (id)
on delete cascade,
constraint fk_product_categories_product
foreign key (product_id) references products (id)
on delete cascade
);

问题似乎是category_id,如果我删除它,那么表就可以毫无问题地创建了。

类别表也与ID匹配;

CREATE TABLE `categories` (
`id` char(36) NOT NULL,
....
)

不幸的是,我仍然得到以下错误;[HY000][1005] Can't create table product_categories (errno: 150 "Foreign key constraint is incorrectly formed")。我在这里错过了什么?

首先,您需要创建要链接的表

";链接表";应该有像这样的约束

primary key (id_1, id_2),
constraint 'constraint fk1_name'
foreign key (id_1) references 'table_where_id_1_is' (id_1),
constraint 'constraint fk2_name'
foreign key (id_2) references 'table_where_id_2_is' (id_2)

如果你需要,你可以添加上更新/删除级联

希望它能有所帮助,我从我的项目中获得了这种格式,它有多个有效的链接表,所以它应该能帮助你。

此外,请记住,我猜你在链接和你试图链接的表上都有相同名称的id_1或id_2,如果你没有,这将是一个很好的做法。左边的来自链接表,右边的来自您正在链接的表。。。

这里还有我的一个链接表的SQL代码(不要介意我的语言,它胡言乱语xD(

图像

您的表排序规则也应该匹配。如果没有,给定的消息会有点令人困惑,但实际上说明了背后的真相。由于排序规则不同,外键不会匹配。

相关内容

  • 没有找到相关文章

最新更新