codice di errore numero 1005 121 errore su 3 tavoli che cosa sto facendo di sbagliato?

StackOverflow https://stackoverflow.com/questions/3756760

  •  04-10-2019
  •  | 
  •  

Domanda

codice:

SET @OLD_UNIQUE_CHECKS=@@UNIQUE_CHECKS, UNIQUE_CHECKS=0;
SET @OLD_FOREIGN_KEY_CHECKS=@@FOREIGN_KEY_CHECKS, FOREIGN_KEY_CHECKS=0;
SET @OLD_SQL_MODE=@@SQL_MODE, SQL_MODE='TRADITIONAL';

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

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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;

- Tabella 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 SQL_MODE=@OLD_SQL_MODE;
SET FOREIGN_KEY_CHECKS=@OLD_FOREIGN_KEY_CHECKS;
SET UNIQUE_CHECKS=@OLD_UNIQUE_CHECKS;
È stato utile?

Soluzione

ho notato questo:


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

Credo che avete la vostra chiave e riferimenti errate. Questo non può risolvere l'intero problema, ma è ancora qualcosa da fissare :). Fatemi sapere se i vostri errori cambiano con l'aggiornamento.

Modifica:. Ho trovato qualcosa di diverso

Per quanto quotata MySQL di riferimento

InnoDB richiede indici sulle chiavi esterne e chiavi di riferimento in modo che i controlli chiave esterna possono essere veloce e non richiede una scansione di tabella. Nella tabella di riferimento, ci deve essere un indice in cui le colonne chiave esterna sono elencati come prime colonne nello stesso ordine. tale indice viene creato sulla tabella di riferimento automaticamente se non esiste. (Questo è in contrasto con alcune versioni meno recenti, in cui gli indici dovevano essere creati in modo esplicito o la creazione di vincoli di chiave esterna fallirebbe.) Index_name, se dato, viene usato come descritto in precedenza.

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;

Per quel testo di riferimento, le chiavi di riferimento devono essere nello stesso ordine in cui fa riferimento presentati. Li avete in un ordine diverso rispetto la chiave primaria.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top