2010-09-21 93 views
1

代碼:錯誤代碼1005錯誤號碼121在3桌上我做錯了什麼?

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 ; 

- 表mydbSEX


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

- 表mydbTEAMS


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; 

- 表mydbCHAMPIONSHIPS


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; 

- 表mydbTEAMS_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; 

- 表mydbMATCHES


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; 

- 表mydbPLAYERS


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; 

- 表mydbMASTERS


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; 

- 表mydbSANCTIONS


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

- 表mydbSANCTIONS_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

案例錯誤正在修復,我已經多次摻雜並創建了模式,但仍然無法正常工作。 – 2010-09-21 04:06:05

回答

0

我注意到了這一點:


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`) 

我覺得你有你的鑰匙和引用不匹配。這可能無法解決你的整個問題,但它仍然是一個需要修正的問題:)。讓我知道如果您的錯誤隨着更新而改變。

編輯:我發現了別的東西。

MySQL Reference

上市的InnoDB需要對外鍵和被引用鍵的索引以便外鍵檢查可以快速,不需要表掃描。在引用表中,必須有一個索引,其中外鍵列以相同順序排列爲第一列。如果索引表不存在,則會在引用表上自動創建這樣的索引。 (這與一些較早的版本形成對比,在這些版本中索引必須明確創建,否則外鍵約束的創建將失敗。)如前所述,使用index_name(如果已給定)。

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; 

根據該引用文本,引用的鍵需要與引用的表中的順序相同。您擁有的順序與您的主鍵不同。

+0

我剛剛嘗試更改不匹配的引用,但沒有任何更改仍然是相同的問題,感謝您看它! – 2010-09-21 13:11:16

+0

我剛剛用我發現的另一件事更新了我的解決方案。我不知道你是否仍然試圖做到這一點,但可能會有所幫助。 – Banana 2010-09-21 23:16:49

+0

非常感謝你的工作 – 2010-09-25 19:06:55