2016-10-22 9 views
0

同じ外部キーを持つ2つの列を作成しようとしています。これはMySQLのエラーです。 ERROR同じ外部キーを持つ2つの列を作成する方法

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; 

EDITここで1

私はJugador_idJugadorと私の2つのcolumsを参照したいテーブルPartido-Jugadores

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; 

何が問題ですか? ありがとう!

答えて

0

正しい構文が必要な場合は、Partido-Jugadoresの主キーの外観を表示する必要があります。

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

が、私はこれを試したことがありませんが、私はそれは、主キーの定義に誤りがあると仮定し、そして:

ただし、外部キー参照で二回コラムを繰り返してきました外部キー参照のエラー。適切な主キー定義を使用します。

EDIT:

あなたは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 

注:

  • あなたは私の意見では単数形での主キーを、名前を付ける必要があります。
  • テーブル名または列名には-を使用しないでください。代わりに_をセパレータとして使用してください。そうすれば、識別子をエスケープする必要はありません。
+0

私は質問にPartido-Jugadoresを追加しました。私のテーブル* Votaciones *では、列* mvp *と* votante *はPartido-Jugadores *の* Jugador_idJugador *を参照してください。 * Jugador_idJugador *はプライマリキーでなければなりませんか? – arisolarpower

+0

お返事ありがとうございます。 – arisolarpower

関連する問題