对于某些情况,我正在为discord创建一个javascript bot,我正在创建一个大型数据库,以便我可以记录许多不同的信息。
使用数据库的这一部分,以便我可以
我在arch linux下使用MariaDB和MySQL Workbench。 Here's the relevant part of the database design, done on dbdesigner.net. 问题发生在最左边的表格中。
这是我的错误信息:
在第158行完成执行脚本ERROR 1005(HY000):不能 create table
test
。#sql-1bb_6
(错误:150"外键约束 形成错误")exitcode 1操作失败
所以我知道我的外键在158处有问题,但我找不到问题。
ALTER TABLE `messageContentHistoryMentions`
ADD CONSTRAINT `messageContentHistoryMentions_fk1`
FOREIGN KEY (`messageContentCount`) REFERENCES `messageContentHistory`(`messageContentCount`);
令我困惑的部分是158的格式与第156行完全相同,只有不同的字段。下面的第156行运行:
ALTER TABLE `messageContentHistoryMentions`
ADD CONSTRAINT `messageContentHistoryMentions_fk0`
FOREIGN KEY (`messageID`) REFERENCES `messageContentHistory`(`messageID`);
你可能理解为什么我很困惑。
更多信息:
utf8mb4_unicode_ci
感谢。
编辑:这不是重复,因为错误是相似的,它所处的情况是非常不同的
答案 0 :(得分:0)
在您的案例messageContentHistory
中,引用的表格必须有一个索引,其中引用的列(在您的案例中为messageContentCount
)列为第一个列(在给定的顺序)。根据模式,messageContentCount
是主键的一部分,但不是第一部分。 messageID
是主键的最左边部分,这就是它适用于它的原因。
尝试在messageContentCount
上添加另一个索引:
ALTER TABLE messageContentHistory ADD KEY (messageContentCount);
之后它应该可以工作。
或者,如果它适合您的目的,您可以在(messageID
,messageContentCount
)上添加一个外键,而不是两个单独的外键。它也应该工作,因为在这种情况下,条件将得到满足。
MariaDB KB for foreign keys(有趣的部分是子表中的列必须是索引...... )