【发布时间】: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