2010-09-21 16 views
1

code:code d'erreur 1005 numéro d'erreur 121 sur 3 tableaux qu'est-ce que je fais mal?

SET @[email protected]@UNIQUE_CHECKS, UNIQUE_CHECKS=0; 
SET @[email protected]@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0; 
SET @[email protected]@SQL_MODE, SQL_MODE='TRADITIONAL'; 

CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET latin1 COLLATE latin1_swedish_ci ; 

- Tableau mydb. SEX


CREATE TABLE IF NOT EXISTS `mydb`.`SEX` (
    `idSex` INT NOT NULL AUTO_INCREMENT , 
    `descrip` VARCHAR(15) NOT NULL , 
    PRIMARY KEY (`idSex`)) 
ENGINE = InnoDB; 

- Tableau mydb. TEAMS


CREATE TABLE IF NOT EXISTS `mydb`.`TEAMS` (
    `idTeam` INT NOT NULL AUTO_INCREMENT , 
    `name` VARCHAR(50) NOT NULL , 
    `idSex` INT NOT NULL , 
PRIMARY KEY (`idTeam`) , 
    INDEX `ID_SEX` (`idSex` ASC) , 
    CONSTRAINT `ID_SEX` 
    FOREIGN KEY (`idSex`) 
    REFERENCES `mydb`.`SEX` (`idSex`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. CHAMPIONSHIPS


CREATE TABLE IF NOT EXISTS `mydb`.`CHAMPIONSHIPS` (
    `idChampionship` INT NOT NULL AUTO_INCREMENT , 
    `name` VARCHAR(100) NOT NULL , 
    `totalPlayingDays` INT NULL , 
    `startDate` DATE NULL , 
    `EndDate` DATE NULL , 
    `active` CHAR NULL , 
    `idSex` INT NOT NULL , 
    PRIMARY KEY (`idChampionship`) , 
    INDEX `ID_SEX` (`idSex` ASC) , 
    CONSTRAINT `ID_SEX` 
    FOREIGN KEY (`idSex`) 
    REFERENCES `mydb`.`SEX` (`idSex`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. TEAMS_PER_CHAMPIONSHIP


CREATE TABLE IF NOT EXISTS `mydb`.`TEAMS_PER_CHAMPIONSHIP` (
    `idTeam` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    PRIMARY KEY (`idTeam`, `idChampionship`) , 
    INDEX `ID_TEAM` (`idTeam` ASC) , 
    INDEX `ID_CHAMP` (`idChampionship` ASC) , 
    CONSTRAINT `ID_TEAM` 
    FOREIGN KEY (`idTeam`) 
    REFERENCES `mydb`.`TEAMS` (`idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_CHAMP` 
    FOREIGN KEY (`idChampionship`) 
    REFERENCES `mydb`.`CHAMPIONSHIPS` (`idChampionship`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. MATCHES


CREATE TABLE IF NOT EXISTS `mydb`.`MATCHES` (
    `idMatch` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    `idTeam` INT NOT NULL , 
    `date` TIMESTAMP NULL DEFAULT NULL , 
    `gols` INT NULL DEFAULT -1 , 
    `isLocal` CHAR NULL DEFAULT 'N' , 
    PRIMARY KEY (`idMatch`, `idChampionship`, `idTeam`) , 
    INDEX `ID_TEAM_X_CHAMP` (`idChampionship` ASC, `idMatch` ASC) , 
    CONSTRAINT `ID_TEAM_X_CHAMP` 
    FOREIGN KEY (`idChampionship` , `idMatch`) 
    REFERENCES `mydb`.`TEAMS_PER_CHAMPIONSHIP` (`idChampionship` , `idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. PLAYERS


CREATE TABLE IF NOT EXISTS `mydb`.`PLAYERS` (
    `idPlayer` INT NOT NULL , 
    `name` VARCHAR(45) NULL , 
    `lastname` VARCHAR(45) NULL , 
    `performance` VARCHAR(45) NULL , 
    `idTeam` INT NOT NULL , 
    `idSex` INT NOT NULL , 
    PRIMARY KEY (`idPLayer`) , 
    INDEX `ID_TEAM` (`idTeam` ASC) , 
    INDEX `ID_SEX` (`idSex` ASC) , 
    CONSTRAINT `ID_TEAM` 
    FOREIGN KEY (`idTeam`) 
    REFERENCES `mydb`.`TEAMS` (`idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_SEX` 
    FOREIGN KEY (`idSex`) 
    REFERENCES `mydb`.`SEX` (`idSex`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. MASTERS


CREATE TABLE IF NOT EXISTS `mydb`.`MASTERS` (
    `idPlayer` INT NOT NULL , 
    `idMatch` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    `idteam` INT NOT NULL , 
    `gols` INT NOT NULL DEFAULT -1 , 
    PRIMARY KEY (`idPlayer`, `idMatch`, `idChampionship`, `idTeam`) , 
    INDEX `ID_MATCH` (`idMatch` ASC, `idChampionship` ASC, `idTeam` ASC) , 
    INDEX `ID_PLAY` (`idPLayer` ASC) , 
    CONSTRAINT `ID_MATCH` 
    FOREIGN KEY (`idMatch` , `idChampionship` , `idTeam`) 
    REFERENCES `mydb`.`MATCHES` (`idMatch` , `idChampionship` , `idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_PLAY` 
    FOREIGN KEY (`idPlayer`) 
    REFERENCES `mydb`.`PLAYERS` (`idPlayer`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

- Tableau mydb. SANCTIONS


CREATE TABLE IF NOT EXISTS `mydb`.`SANCTIONS` (
    `idSanction` INT NOT NULL , 
    `descrip` VARCHAR(100) NOT NULL DEFAULT 'A DEFINIR' , 
    PRIMARY KEY (`idSanction`)) 
ENGINE = InnoDB; 

- Tableau mydb. SANCTIONS_PLAYERS


CREATE TABLE IF NOT EXISTS `mydb`.`SANCIONS_PLAYERS` (
    `idPlayer` INT NOT NULL , 
    `idMatch` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    `idTeam` INT NOT NULL , 
    `idSanction` INT NOT NULL , 
    PRIMARY KEY (`idPlayer`, `idMatch`, `idChampionship`, `idTeam`) , 
    INDEX `ID_PLAY` (`idPlayer` ASC) , 
    INDEX `ID_MATCH` (`idMatch` ASC, `idChampionship` ASC, `idTeam` ASC) , 
    INDEX `ID_SANC` (`idSanction` ASC) , 
    CONSTRAINT `ID_PLAY` 
    FOREIGN KEY (`idPlayer`) 
    REFERENCES `mydb`.`PLAYERS` (`idPlayer`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_MATCH` 
    FOREIGN KEY (`idMatch` , `idChampionship` , `idTeam`) 
    REFERENCES `mydb`.`MATCHES` (`idMatch` , `idChampionship` , `idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_SANC` 
    FOREIGN KEY (`idSanction`) 
    REFERENCES `mydb`.`SANCTIONS` (`idSanction`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 



SET [email protected]_SQL_MODE; 
SET [email protected]_FOREIGN_KEY_CHECKS; 
SET [email protected]_UNIQUE_CHECKS; 
+0

Les erreurs de cas sont en cours de correction et j'ai dopé et créé le schéma plusieurs fois, ne fonctionnant toujours pas. –

Répondre

0

Je l'ai remarqué:


CREATE TABLE IF NOT EXISTS `mydb`.`MATCHES` (
    `idMatch` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    `idTeam` INT NOT NULL , 
    `date` TIMESTAMP NULL DEFAULT NULL , 
    `gols` INT NULL DEFAULT -1 , 
    `isLocal` CHAR NULL DEFAULT 'N' , 
    PRIMARY KEY (`idMatch`, `idChampionship`, `idTeam`) , 
    INDEX `ID_TEAM_X_CHAMP` (`idChampionship` ASC, `idMatch` ASC) , 
    CONSTRAINT `ID_TEAM_X_CHAMP` 
    FOREIGN KEY (`idChampionship` , `idMatch`) 
    REFERENCES `mydb`.`TEAMS_PER_CHAMPIONSHIP` (`idChampionship` , `idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

    FOREIGN KEY (`idChampionship` , `idMatch`) 
    REFERENCES `mydb`.`TEAMS_PER_CHAMPIONSHIP` (`idChampionship` , `idTeam`) 

Je pense que vous avez votre clé et les références ne correspondent pas.Cela peut ne pas résoudre votre problème entier, mais c'est encore quelque chose à corriger :). Faites-moi savoir si vos erreurs changent avec cette mise à jour.

Editer: J'ai trouvé autre chose.

Tel qu'indiqué sur MySQL Reference

InnoDB nécessite des index sur des clés étrangères et des clés référencées afin que les contrôles clés étrangers peuvent être rapide et ne nécessite pas une analyse de table. Dans la table de référence, il doit y avoir un index où les colonnes de clé étrangère sont répertoriées en tant que premières colonnes dans le même ordre. Un tel index est créé automatiquement sur la table de référence s'il n'existe pas. (Cela contraste avec certaines versions plus anciennes, dans lesquelles les index devaient être créés explicitement ou la création de contraintes de clé étrangère échouait). Index_name, s'il est donné, est utilisé comme décrit précédemment.

CREATE TABLE IF NOT EXISTS `mydb`.`TEAMS_PER_CHAMPIONSHIP` (
    `idTeam` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    PRIMARY KEY (`idTeam`, `idChampionship`) , 
    INDEX `ID_TEAM` (`idTeam` ASC) , 
    INDEX `ID_CHAMP` (`idChampionship` ASC) , 
    CONSTRAINT `ID_TEAM` 
    FOREIGN KEY (`idTeam`) 
    REFERENCES `mydb`.`TEAMS` (`idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION, 
    CONSTRAINT `ID_CHAMP` 
    FOREIGN KEY (`idChampionship`) 
    REFERENCES `mydb`.`CHAMPIONSHIPS` (`idChampionship`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

CREATE TABLE IF NOT EXISTS `mydb`.`MATCHES` (
    `idMatch` INT NOT NULL , 
    `idChampionship` INT NOT NULL , 
    `idTeam` INT NOT NULL , 
    `date` TIMESTAMP NULL DEFAULT NULL , 
    `gols` INT NULL DEFAULT -1 , 
    `isLocal` CHAR NULL DEFAULT 'N' , 
    PRIMARY KEY (`idMatch`, `idChampionship`, `idTeam`) , 
    INDEX `ID_TEAM_X_CHAMP` (`idChampionship` ASC, `idMatch` ASC) , 
    CONSTRAINT `ID_TEAM_X_CHAMP` 
    FOREIGN KEY (`idChampionship` , `idMatch`) 
    REFERENCES `mydb`.`TEAMS_PER_CHAMPIONSHIP` (`idChampionship` , `idTeam`) 
    ON DELETE NO ACTION 
    ON UPDATE NO ACTION) 
ENGINE = InnoDB; 

Par ce texte de référence, les clés référencées doivent être dans le même ordre que sur le tableau référencé. Vous les avez dans un ordre différent de votre clé primaire.

+0

Je viens d'essayer de changer les références mésappariées mais rien n'a encore changé le même problème, merci de le regarder! –

+0

Je viens de mettre à jour ma solution avec une autre chose que j'ai trouvée. Je ne sais pas si vous essayez toujours de faire marcher ça, mais ça pourrait aider. – Banana

+0

Il a travailléddd merci beaucoup muchhhhh –