gpt4 book ai didi

MySQL 错误代码 : 1215. 无法添加外键约束

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

我在 MySQL 中创建了两个表。他们的创建查询如下

CREATE TABLE ix_consultant_affected_columns (
master_id int(10) NOT NULL,
logging_session int(10) NOT NULL,
text_id bigint(20) NOT NULL,
table_id int(10) NOT NULL,
column_id int(10) NOT NULL,
PRIMARY KEY (text_id, master_id, logging_session, table_id, column_id)
) ENGINE = INNODB DEFAULT charset = latin1;

CREATE TABLE ix_consultant_query_text (
master_id int(10) NOT NULL,
logging_session int(10) NOT NULL,
text_id bigint(20) NOT NULL,
count int(10) NOT NULL,
discarded tinyint(3) DEFAULT NULL,
query_type varchar(1) DEFAULT NULL,
no_tuner_score float DEFAULT NULL,
num_rows_affected float DEFAULT NULL,
text_plan longtext,
PRIMARY KEY (logging_session, master_id, text_id)
) ENGINE = INNODB DEFAULT charset = latin1;

现在我想在 alter query 中应用外键。但它给出了
错误代码:1215。无法添加外键约束
更改查询是:

ALTER TABLE ix_consultant_affected_columns
ADD FOREIGN KEY (master_id) REFERENCES ix_consultant_query_text (master_id),
ADD FOREIGN KEY (logging_session) REFERENCES ix_consultant_query_text (logging_session),
ADD FOREIGN KEY (text_id) REFERENCES ix_consultant_query_text (text_id);

我试着寻找两者之间的约束或数据类型差异。但我无法确定问题所在。
注意: 如果我仅使用 logging_session 列运行 alter query,则查询工作正常并且应用了外键。问题出在 master_id 和 text_id

编辑:

我发现问题是 alter 查询不在引用表的序列中。 ix_consultant_query_text 表中的主索引序列为:

  1. logging_session
  2. master_id
  3. text_id

因此,当我在引用表的主索引序列中创建更改查询时,它运行良好。

ALTER TABLE ix_consultant_affected_columns 
ADD FOREIGN KEY (logging_session,master_id,text_id) REFERENCES ix_consultant_query_text(logging_session,master_id,text_id)

现在的问题是我正在动态创建这个 alter 查询,那么有没有办法从引用的表中获取列的顺序(主索引)?

最佳答案

您正在尝试将三个外键添加到 ix_consultant_query_text 表中的下一个字段:

  • text_id
  • master_id
  • logging_session

但只有 ix_consultant_query_text.logging_session 是唯一的。外键创建要求所有引用的字段都是唯一的。

关于MySQL 错误代码 : 1215. 无法添加外键约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43543265/

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