繁体   English   中英

#1005-无法创建表格(错误号150)

[英]#1005 - can't create table (errno 150)

当我在控制台Sql中运行脚本时

-- -----------------------------------------------------
-- Table `invictus`.`Equipo`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `invictus`.`Equipo` (
  `idPartido` INT NOT NULL,
  `nomEquipo` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idPartido`, `nomEquipo`),
  CONSTRAINT `fkequipo_idPartido`
    FOREIGN KEY (`idPartido`)
    REFERENCES `invictus`.`Partido` (`idPartido`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `invictus`.`Equipo-Ganador`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `invictus`.`Equipo-Ganador` (
  `idPartido` INT NOT NULL,
  `equipoganador` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idPartido`, `equipoganador`),
  INDEX `fkeg_equipoganador_idx` (`equipoganador` ASC),
  CONSTRAINT `fkeg_idpartido`
    FOREIGN KEY (`idPartido`)
    REFERENCES `invictus`.`Equipo` (`idPartido`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fkeg_equipoganador`
    FOREIGN KEY (`equipoganador`)
    REFERENCES `invictus`.`Equipo` (`nomEquipo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

在控制台中显示以下错误:

错误咨询SQL:

CREATE TABLE IF NOT EXISTS `invictus`.`Equipo-Ganador` (
  `idPartido` INT NOT NULL,
  `equipoganador` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idPartido`, `equipoganador`),
  INDEX `fkeg_equipoganador_idx` (`equipoganador` ASC),
  CONSTRAINT `fkeg_idpartido`
    FOREIGN KEY (`idPartido`)
    REFERENCES `invictus`.`Equipo` (`idPartido`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fkeg_equipoganador`
    FOREIGN KEY (`equipoganador`)
    REFERENCES `invictus`.`Equipo` (`nomEquipo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB
MySQL ha dicho: Documentación

#1005 - Can't create table 'invictus.Equipo-Ganador' (errno: 150) (Detalles…)

我一直在搜索可能的错误:

  1. 两个关键字段的类型和/或大小不完全匹配。
  2. 外键名称是已存在键的重复。
  3. 我尝试引用的键字段之一没有索引和/或不是主键。

    这个可能的错误在这里

谢谢你的帮助。

您的数据结构对我来说没有意义-复合主键通常没有意义。

但是,对于外键引用,您需要引用外键中的所有列,而不是一次引用:

CREATE TABLE IF NOT EXISTS `Equipo-Ganador` (
  `idPartido` INT NOT NULL,
  `equipoganador` VARCHAR(45) NOT NULL,
  PRIMARY KEY (`idPartido`, `equipoganador`),
  INDEX `fkeg_equipoganador_idx` (`equipoganador` ASC),
  CONSTRAINT `fkeg_idpartido_equipoganador`
    FOREIGN KEY (`idPartido`, equipoganador)
    REFERENCES `Equipo` (`idPartido`, nomEquipo)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

这在SQL Fiddle中有效

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM