微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MySQL 集群 - 复合外键错误:缺少约束索引

如何解决MySQL 集群 - 复合外键错误:缺少约束索引

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

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,并且每个表中的两列都是相同的。另外我在 yid,tenant_id 表中有索引。 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,KEY `y_id_tenant_id` (`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 并没有解决问题。

解决方法

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

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。