我必须在“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 );
答案 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;