mysql - 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 需要索引 (...) 引用的键 (...)
您在 , 上有可用的索引indicadores.programa
,因为primary key (programa,indicador,tipo)
andforeign key (programa) references programas(programa)
隐式创建索引并且programa
是它们的第一列。
但是您没有可用的索引indicadores.indicador
。primary 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)
。
推荐阅读
- matlab - 如何有效地应用二进制函数来选择 2 个表的列,并且仅根据某些条件选择行?
- r - 用组名及其方程标记 ggplot,可能用 ggpmisc?
- bootstrap-4 - 为什么我的引导和媒体查询没有响应
- java - 如何从文件中读取java中的所有数据并形成数组列表
- c - 如何让断言打印到 UART?STM32 新库纳米
- node.js - Node.js Github API 连接 ECONNREFUSED 错误获取用户存储库
- azure - 从 Azure 用户定义的输出器读取模板
- java - 从 int 和 double 到 char 的隐式类型转换
- java - 学习 Java 中的 Switch 语句
- arrays - 如何将 ActiveCell 地址存储到 Excel 中的动态 VBA 数组中?