如何使用相同的外键创建两列

时间:2016-10-22 22:57:24

标签: mysql

我正在尝试使用相同的外键创建两个列。这是Mysql中的错误。 的错误

 errno: 150 “Foreign key constraint is incorrectly formed”

SCRIPT

CREATE TABLE IF NOT EXISTS `invictus`.`Votaciones` (
  `idVotaciones` INT NOT NULL AUTO_INCREMENT,
  `mvp` INT NOT NULL,
  `idPartido-Jugador` INT NOT NULL,
  `votante` INT NOT NULL,
  PRIMARY KEY (`idVotaciones`),
  INDEX `fk_Votaciones_Partido-Jugadores_idx` (`mvp` ASC, `idPartido-Jugador` ASC, `votante` ASC),
  CONSTRAINT `fk_Votaciones_Partido-Jugadores`
    FOREIGN KEY (`mvp` , `idPartido-Jugador` , `votante`)
    REFERENCES `invictus`.`Partido-Jugadores` (`Jugador_idJugador` , `Equipos_Partido_idPartido` , `Jugador_idJugador`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

编辑1

这里是表 Partido-Jugadores ,我想用 Jugador_idJugador

引用我的两个列
CREATE TABLE IF NOT EXISTS `invictus`.`Partido-Jugadores` (
  `idPartido-Jugadores` INT NOT NULL AUTO_INCREMENT,
  `Equipos_idEquipos` INT NOT NULL,
  `Equipos_Partido_idPartido` INT NOT NULL,
  `Equipos_Partido_fecha` DATETIME NOT NULL,
  `Equipos_Partido_Grupo_idGrupo` INT NOT NULL,
  `Equipos_nombreEquipo` VARCHAR(45) NOT NULL,
  `Jugador_idJugador` INT NOT NULL,
  PRIMARY KEY (`idPartido-Jugadores`, `Equipos_idEquipos`, `Equipos_Partido_idPartido`, `Equipos_Partido_fecha`, `Equipos_Partido_Grupo_idGrupo`, `Equipos_nombreEquipo`, `Jugador_idJugador`),
  INDEX `fk_Partido-Jugadores_Equipos1_idx` (`Equipos_idEquipos` ASC, `Equipos_Partido_idPartido` ASC, `Equipos_Partido_fecha` ASC, `Equipos_Partido_Grupo_idGrupo` ASC, `Equipos_nombreEquipo` ASC),
  INDEX `fk_Partido-Jugadores_Jugador1_idx` (`Jugador_idJugador` ASC),
  CONSTRAINT `fk_Partido-Jugadores_Equipos1`
    FOREIGN KEY (`Equipos_idEquipos` , `Equipos_Partido_idPartido` , `Equipos_Partido_fecha` , `Equipos_Partido_Grupo_idGrupo` , `Equipos_nombreEquipo`)
    REFERENCES `invictus`.`Equipos` (`idEquipos` , `Partido_idPartido` , `Partido_fecha` , `Partido_Grupo_idGrupo` , `nombreEquipo`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Partido-Jugadores_Jugador1`
    FOREIGN KEY (`Jugador_idJugador`)
    REFERENCES `invictus`.`Miembros-Grupo` (`Jugador_idJugador`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

有什么问题? 谢谢!

1 个答案:

答案 0 :(得分:0)

如果您需要正确的语法,则需要显示Partido-Jugadores的主键。

但是,您在外键引用中重复了两次列:

REFERENCES `invictus`.`Partido-Jugadores` (**`Jugador_idJugador`**, `Equipos_Partido_idPartido` , **`Jugador_idJugador`**)

我从来没有尝试过这个,但我认为主键定义中的错误,以及外键引用中的错误。使用适当的主键定义。

编辑:

如果Partido-Jugadores中有自动增量列,那么它应该是主键。除此之外别无其他:

PRIMARY KEY (`idPartido-Jugadores`),

然后外键引用将是:

CONSTRAINT `fk_Votaciones_Partido-Jugadores`
  FOREIGN KEY (`idPartido-Jugador)
  REFERENCES `invictus`.`Partido-Jugadores` (`Jugador_idJugadores`)
  ON DELETE NO ACTION ON UPDATE NO ACTION

注意:

  • 在我看来,您应该以单数形式命名主键。
  • 您不应在表名或列名中使用-。请改用_作为分隔符。这样,标识符就不需要转义。