gpt4 book ai didi

mysql - MariaDB下MySQL出现奇怪的外键错误

转载 作者:行者123 更新时间:2023-11-29 18:37:57 24 4
gpt4 key购买 nike

对于某些上下文,我正在为不和谐创建一个 JavaScript 机器人,并且正在创建一个大型数据库,以便我可以记录许多不同的信息。

使用这部分数据库以便我可以

  1. 存储消息
  2. 存储历史消息以及每次编辑
  3. 轻松查找这些历史消息中提到了哪些用户。

我在 arch linux 下使用 MariaDB 和 MySQL Workbench。 Here's the relevant part of the database design, done on dbdesigner.net.问题发生在最左边的表上。

这是我的错误消息:

Finished executing script ERROR 1005 (HY000) at line 158: Can't create table test.#sql-1bb_6 (errno: 150 "Foreign key constraint is incorrectly formed") Operation failed with 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`);

你大概可以理解为什么我很困惑。
更多信息:

  • 这是 MariaDB 的新安装,因此采用默认值
  • InnoDB 是正在使用的引擎
  • 所有表的排序规则均为 utf8mb4_unicode_ci
  • 外键两边都是主键,均为整数,长度为8,默认为0。

谢谢。
编辑:这不是重复的,因为虽然错误相似,但情况却非常不同

最佳答案

在您的情况下引用的表 messageContentHistory ,必须有一个索引,其中引用的列,在您的情况下 messageContentCount ,列为第一列(按给定顺序)。根据架构,messageContentCount是主键的一部分,但不是第一部分。 messageID 主键的最左边部分,这就是它起作用的原因。

尝试在messageContentCount上添加另一个索引:

ALTER TABLE messageContentHistory ADD KEY (messageContentCount);

之后应该可以工作。

或者,如果适合您的目的,您可以在( messageIDmessageContentCount )上添加一个外键,而不是添加两个单独的外键。它也应该有效,因为在这种情况下,条件将得到满足。

MariaDB KB for foreign keys (有趣的部分是子表中的列必须是索引...)

关于mysql - MariaDB下MySQL出现奇怪的外键错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45123134/

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