首页 > 解决方案 > ERROR 1215 (HY000): 无法在创建表时添加外键约束

问题描述

我在 MySQL 中创建了三个表,它们是 programas、indicadores 和 seguimientoProgramado。

当我尝试创建第三个时,出现此错误:

ERROR 1215 (HY000): Cannot add foreign key constraint

表程序:

create table programas(
    programa int not null,
    nombrePrograma varchar(60),
    primary key (programa));

表指标:

create table indicadores(
    programa int not null,
    indicador varchar(10) not null,
    tipo enum('blanco','gris') not null,
    nombreIndicador varchar(300),
    periodicidad enum('anual','semestral','trimestral'),
    calculo enum('sumable','masAlto'),
    correlacion varchar(1000),
    comentarioTecnico varchar(1000),
    primary key (programa,indicador,tipo),
    foreign key (programa) references programas(programa)
    );

表 seguimientoProgramado:

create table seguimientoProgramado(
    programa int not null,
    indicador varchar(10) not null,
    trim1 int,
    trim2 int,
    trim3 int,
    trim4 int,
    avanceProgramado int,
    primary key (programa,indicador),
    foreign key (programa) references indicadores(programa),
    foreign key (indicador) references indicadores(indicador)
    );

我究竟做错了什么?

标签: mysql

解决方案


来自“13.1.18.6 使用外键约束”

  • MySQL 需要索引 (...) 引用的键 (...)

您在 , 上有可用的索引indicadores.programa,因为primary key (programa,indicador,tipo)andforeign key (programa) references programas(programa)隐式创建索引并且programa是它们的第一列。

但是您没有可用的索引indicadores.indicadorprimary key (programa,indicador,tipo)在这里没有效果,因为indicador是索引中的第二列。

要解决此问题,请在indicadores.indicador. 例如,通过更改您的CREATE声明indicadores

create table indicadores(
    programa int not null,
    ...
    comentarioTecnico varchar(1000),
    primary key (programa,indicador,tipo),
    foreign key (programa) references programas(programa),
    key (indicador)
    );

注意key (indicador)


推荐阅读