MySQL错误:“外键约束不正确”

时间:2018-03-05 10:01:17

标签: mysql

我有以下代码是SQL,我仔细检查了一切,但我没有发现它的错误:

create table if not exists Agencia (
             nombreAgencia varchar(20) charset utf8 not null,
             pais varchar(20) charset utf8 not null,
             primary key (nombreAgencia)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table if not exists Mision (
             codigoMision varchar(20) charset utf8 not null,
             descripcion varchar(240) charset utf8 not null,
             primary key (codigoMision)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table if not exists Agente (
             nombreAgencia varchar(20) charset utf8 not null,
             idAgente int(10) not null,
             nombreClave varchar(100) charset utf8 not null,
             primary key (nombreAgencia,idAgente),
             foreign key (nombreAgencia) references Agencia(nombreAgencia)
             on delete cascade on update cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table if not exists Sede (
             nombreAgencia varchar(20) charset utf8 not null,
             nombreSede varchar(30) charset utf8 not null,
             primary key (nombreAgencia,nombreSede)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table if not exists Agente_t_Mision (
             nombreAgencia varchar(20) charset utf8 not null,
             idAgente int(10) not null,
             codigoMision varchar(20) charset utf8,
             primary key (nombreAgencia,idAgente),
             foreign key (nombreAgencia) references Agente(nombreAgencia)
             on delete cascade on update cascade,
             foreign key (idAgente) references Agente(idAgente)
             on delete cascade on update cascade,
             foreign key (codigoMision) references Mision(codigoMision)
             on delete cascade on update cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8;
create table if not exists Agente_p_Sede (
             nombreAgencia varchar(20) charset utf8 not null,
             idAgente int(10) not null,
             nombreSede varchar(20) charset utf8,
             primary key (nombreAgencia,idAgente),
             foreign key (nombreAgencia) references Agente(nombreAgencia)
             on delete cascade on update cascade,
             foreign key (idAgente) references Agente(idAgente)
             on delete cascade on update cascade,
             foreign key (nombreSede) references Sede(nombreSede)
             on delete cascade on update cascade
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

我收到以下错误:

ERROR 1005 (HY000) at line 27 in file: '/home/kolt/Documents/IPN/6S/DDB/1P/tablas.sql': Can't create table `agencias`.`Agente_t_Mision` (errno: 150 "Foreign key constraint is incorrectly formed")
ERROR 1005 (HY000) at line 39 in file: '/home/kolt/Documents/IPN/6S/DDB/1P/tablas.sql': Can't create table `agencias`.`Agente_p_Sede` (errno: 150 "Foreign key constraint is incorrectly formed")

所有内容都与引用有关,从名称到类型,字符集和引擎,我还没有找到错误的好解释。

1 个答案:

答案 0 :(得分:1)

由于Agente具有复合主键(nombreAgencia,idAgente),因此对它的任何引用都必须包含两列。

create table if not exists Agente_p_Sede (
         nombreAgencia varchar(20) charset utf8 not null,
         idAgente int(10) not null,
         nombreSede varchar(20) charset utf8,
         primary key (nombreAgencia,idAgente),
         foreign key (idAgente, nombreAgencia) references Agente(idAgente, nombreAgencia)
         on delete cascade on update cascade,
         foreign key (nombreSede) references Sede(nombreSede)
         on delete cascade on update cascade


create table if not exists Agente_t_Mision (
         nombreAgencia varchar(20) charset utf8 not null,
         idAgente int(10) not null,
         codigoMision varchar(20) charset utf8,
         primary key (nombreAgencia,idAgente),
         foreign key (idAgente, nombreAgencia) references Agente(idAgente, nombreAgencia)
         on delete cascade on update cascade,
         foreign key (codigoMision) references Mision(codigoMision)
         on delete cascade on update cascade

你不能只在目标表上创建PK的部分PK - 只是不能这样做。