【问题标题】:MySQL Cluster - Composite foreign key error: Missing index for constraintMySQL Cluster - 复合外键错误:缺少约束索引
【发布时间】:2021-09-19 15:51:35
【问题描述】:

我想将复合外键添加到我的 MySQL 集群表中。当我在本地尝试执行语句时,但在集群上出现以下错误:

Failed to add the foreign key constraint. Missing index for constraint... in the referenced table 'y'

这是声明:

ALTER TABLE x
 ADD CONSTRAINT fk_x_y
 FOREIGN KEY (y_id, tenant_id) 
 REFERENCES y(id, tenant_id);

我已经为两个表执行了SHOW FULL COLUMNS FROM,并且每个表中的两列都是相同的。我在id, tenant_id 上的y 表中也有索引。 MySQL 集群版本:8.0.25-cluster

编辑 1:

SHOW CREATE TABLE 结果:

x:

CREATE TABLE `x` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `tenant_id` bigint(20) DEFAULT NULL,
   PRIMARY KEY (`id`),
   KEY `fk_y_id_tenant_id` (`tenant_id`),
   CONSTRAINT `fk_x_tenant_id` FOREIGN KEY (`tenant_id`) REFERENCES `tenant` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
 ) ENGINE=ndbcluster AUTO_INCREMENT=446 DEFAULT CHARSET=utf8;

y:

CREATE TABLE `reference_list` (
   `id` bigint(20) NOT NULL AUTO_INCREMENT,
   `tenant_id` bigint(20) NOT NULL,
   PRIMARY KEY (`id`),
   KEY `y_id_tenant_id` (`id`,`tenant_id`),
   KEY `fk_y_id_tenant_id` (`tenant_id`),
   CONSTRAINT `fk_y_id_tenant_id` FOREIGN KEY (`tenant_id`) REFERENCES `tenant` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
 ) ENGINE=ndbcluster AUTO_INCREMENT=7 DEFAULT CHARSET=utf8;

我知道tenant_id 在一个表中为DEFAULT NULL,在另一个表中为NOT_NULL,但将两者都更改为DEFAULT NULL 并没有解决问题。

【问题讨论】:

  • MySQL 说你在(id, tenant_id) 上没有索引,虽然你说你有这样的索引,但如果有疑问,MySQL 通常是正确的。请添加表定义(例如show create table y(和x)的输出。
  • @Solarflare 我已经编辑了我的问题

标签: mysql mysql-cluster


【解决方案1】:

运行后:SHOW WARNINGS; 我发现我必须在idtenant_id 列上添加UNIQUE 索引。

【讨论】:

    猜你喜欢
    • 2018-09-01
    • 2019-12-02
    • 2017-09-16
    • 2014-12-07
    • 2016-05-23
    • 2019-02-27
    • 1970-01-01
    • 1970-01-01
    • 2019-06-06
    相关资源
    最近更新 更多