我在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)
);
我做错了什么?
答案 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)
);
。