“1215 - 无法添加外键约束”

时间:2017-02-01 17:56:51

标签: mysql

我必须在“Sceglie”表中创建一个双外键,但是MySQL总是向我显示相同的错误:“#1215 - 无法添加外键约束”。它只发生在“Cognome_candidato”而不是“Nome_candidato”。我也试过写FOREIGN KEY (Nome_candidato, Cognome_candidato) REFERENCES Candidato(Nome_candidato, Cognome_candidato) ON DELETE CASCADE ON UPDATE CASCADE,但它没有创建双外键。我该如何解决?

create table Candidato (
Nome_candidato varchar(255),
Cognome_candidato varchar(255),
PRIMARY KEY (Nome_candidato, Cognome_candidato));

create table Sceglie (
Email varchar(255),
Nome_candidato varchar(255),
Cognome_candidato varchar(255),
PRIMARY KEY (Email, Nome_candidato, Cognome_candidato),
FOREIGN KEY (Email) REFERENCES Utente(Email)
ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (Nome_candidato) REFERENCES Candidato(Nome_candidato)
ON DELETE CASCADE 
ON UPDATE CASCADE, 
FOREIGN KEY (Cognome_candidato) REFERENCES Candidato(Cognome_candidato)
ON DELETE CASCADE 
ON UPDATE CASCADE );

2 个答案:

答案 0 :(得分:0)

在外键引用该列之前,您需要cognome_candidato的索引。

答案 1 :(得分:0)

这应该解决它。

-- -----------------------------------------------------
-- Schema mydb
-- -----------------------------------------------------
CREATE SCHEMA IF NOT EXISTS `mydb` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci ;
USE `mydb` ;

-- -----------------------------------------------------
-- Table `mydb`.`Candidato`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Candidato` (
  `Nome_candidato` VARCHAR(255) NOT NULL,
  `Cognome_candidato` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`Nome_candidato`, `Cognome_candidato`))
  ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Utente`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Utente` (
  `Email` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`Email`))
  ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `mydb`.`Sceglie`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `mydb`.`Sceglie` (
  `Nome_candidato` VARCHAR(255) NOT NULL,
  `Cognome_candidato` VARCHAR(255) NOT NULL,
  `Email` VARCHAR(255) NOT NULL,
  PRIMARY KEY (`Nome_candidato`, `Cognome_candidato`, `Email`),
  INDEX `fk_Candidato_has_Utente_Utente1_idx` (`Email` ASC),
  INDEX `fk_Candidato_has_Utente_Candidato_idx` (`Nome_candidato` ASC, `Cognome_candidato` ASC),
  CONSTRAINT `fk_Candidato_has_Utente_Candidato`
  FOREIGN KEY (`Nome_candidato` , `Cognome_candidato`)
  REFERENCES `mydb`.`Candidato` (`Nome_candidato` , `Cognome_candidato`)
    ON DELETE CASCADE
    ON UPDATE CASCADE,
  CONSTRAINT `fk_Candidato_has_Utente_Utente1`
  FOREIGN KEY (`Email`)
  REFERENCES `mydb`.`Utente` (`Email`)
    ON DELETE CASCADE
    ON UPDATE CASCADE)
  ENGINE = InnoDB;