mysql - 我在mysql中的表有什么问题?
问题描述
我要创建3个表。表“post”和“taxonomy”通过主键和外键连接到“taxonomy_relationship”表,但我不知道为什么会出现此错误:
1005 - 无法创建表 taxonomy_relationship(错误号:150“外键约束”格式不正确”)
CREATE TABLE `post`(
id int not null AUTO_INCREMENT,
title varchar(255) not null,
content TEXT not null,
PRIMARY KEY(id)
);
CREATE TABLE `taxonomy`(
id int not null AUTO_INCREMENT,
tax_title varchar(255) not null,
type varchar(255) not null,
PRIMARY KEY(id, tax_title)
);
CREATE TABLE taxonomy_relationship(
id INT AUTO_INCREMENT,
post_id int not null,
title varchar(255) not null,
PRIMARY KEY(id),
FOREIGN KEY (post_id)
REFERENCES post(id)
ON DELETE CASCADE
ON UPDATE CASCADE
FOREIGN KEY (title)
REFERENCES taxonomy(tax_title)
ON DELETE CASCADE
ON UPDATE CASCADE
);
当我使用“SHOW ENGINE INNODB STATUS”显示错误详细信息时,它返回:
> 2020-01-19 16:08:31 0x2fb8 表的外键约束错误
blog
。taxonomy_relationship
:
FOREIGN KEY (title)
REFERENCES taxonomy(tax_title)
ON DELETE CASCADE
ON UPDATE CASCADE
):
在被引用的列作为第一列出现的被引用表中找不到索引,或者表中的列类型与被引用表不匹配为约束。请注意,使用 >= InnoDB-4.1.12 创建的表中 ENUM 和 SET 的内部存储类型发生了变化,并且旧表中的此类列不能被新表中的此类列引用。有关正确的外键定义,请参阅https://mariadb.com/kb/en/library/foreign-keys/。创建表blog
。taxonomy_relationship
外键约束失败。引用表中没有索引,其中引用列显示为“FOREIGN KEY (title)
REFERENCES taxonomy(tax_title)
ON DELETE CASCADE
ON UPDATE CASCADE
)”附近的第一列。
解决方案
您应该KEY title_idx (tax_title)
在taxonomy
表上添加索引:
CREATE TABLE `taxonomy` (
`id` int NOT NULL AUTO_INCREMENT,
`tax_title` varchar(255) NOT NULL,
`type` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
KEY `title_idx` (`tax_title`)
);
创建外键后:
CREATE TABLE taxonomy_relationship(
id INT AUTO_INCREMENT,
post_id int not null,
title varchar(255) not null,
PRIMARY KEY(id),
FOREIGN KEY (post_id)
REFERENCES post(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (title)
REFERENCES taxonomy(tax_title)
ON DELETE CASCADE
ON UPDATE CASCADE
);
您可以复制但按字段链接title
的另一种方法:taxonomy_relationship
id
CREATE TABLE taxonomy_relationship(
id INT AUTO_INCREMENT,
post_id int not null,
taxonomy_id int not null,
PRIMARY KEY(id),
FOREIGN KEY (post_id)
REFERENCES post(id)
ON DELETE CASCADE
ON UPDATE CASCADE,
FOREIGN KEY (taxonomy_id)
REFERENCES taxonomy(id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
推荐阅读
- c# - 如何使用 Select 2 从下拉列表中获取选定的值
- azure-cosmosdb - CosmosDB SQL API 插入或合并
- bash - 如何将所有先决条件复制到 Makefile 中的某个文件夹?
- flutter - 如何重建小部件
- javascript - 如何格式化此关联获取续集
- reactjs - 为文件加载添加自定义按钮
- javascript - 为什么使用 $(document).height() 每次点击都会增加背景?
- c++ - RPi Pico 在 IRQ 中断调用上冻结
- javascript - 赛普拉斯 - 遍历数组
- vue.js - 如何在 Vue.js 中绑定 API 响应中的选项数据?