错误1215(HY000):无法在创建表时添加外键约束

时间:2018-05-29 19:13:13

标签: mysql

我在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));

表indadores:

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)
    );

我做错了什么?

1 个答案:

答案 0 :(得分:0)

来自"13.1.18.6 Using FOREIGN KEY Constraints"

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

indicadores.programa上有可用的索引,因为primary key (programa,indicador,tipo)foreign key (programa) references programas(programa)隐式创建索引,而programa是其中的第一列。

但是indicadores.indicador上没有可用的索引。 primary key (programa,indicador,tipo)在此处无效,因为indicador是索引中的第二列。

要解决此问题,请在indicadores.indicador上添加索引。例如。通过更改CREATE的{​​{1}}语句:

indicadores

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