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

MySQL错误:“外键约束格式不正确”,mysql,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 CH

我有以下代码是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")
从名称到类型、字符集和引擎,所有的引用都是正确的,我仍然没有找到一个好的错误解释。

因为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的一部分的FK关系-只是不能这样做。

对于创建外键,您还必须保持大小相同的数据类型。请检查您是否满足所有FK要求谢谢,这就是问题所在。