Estou tentando encaminhar meu novo esquema para o meu servidor db, mas não consigo'não consigo entender porque estou recebendo este erro. I'tentei procurar a resposta aqui, mas tudo o que eu'encontrei disse ou para ajustar o motor db para Innodb ou para garantir que as chaves I'estou tentando usar como chave estrangeira são chaves primárias em suas próprias tabelas. Eu fiz ambas estas coisas, se não estou enganado. Alguma outra ajuda que vocês possam oferecer?
Executing SQL script in server
ERROR: Error 1215: Cannot add foreign key constraint
-- -----------------------------------------------------
-- Table `Alternative_Pathways`.`Clients_has_Staff`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients_has_Staff` (
`Clients_Case_Number` INT NOT NULL ,
`Staff_Emp_ID` INT NOT NULL ,
PRIMARY KEY (`Clients_Case_Number`, `Staff_Emp_ID`) ,
INDEX `fk_Clients_has_Staff_Staff1_idx` (`Staff_Emp_ID` ASC) ,
INDEX `fk_Clients_has_Staff_Clients_idx` (`Clients_Case_Number` ASC) ,
CONSTRAINT `fk_Clients_has_Staff_Clients`
FOREIGN KEY (`Clients_Case_Number` )
REFERENCES `Alternative_Pathways`.`Clients` (`Case_Number` )
ON DELETE NO ACTION
ON UPDATE NO ACTION,
CONSTRAINT `fk_Clients_has_Staff_Staff1`
FOREIGN KEY (`Staff_Emp_ID` )
REFERENCES `Alternative_Pathways`.`Staff` (`Emp_ID` )
ON DELETE NO ACTION
ON UPDATE NO ACTION)
ENGINE = InnoDB
Execução de scripts SQL finalizada: instruções: 7 tiveram sucesso, 1 falhou
Aqui está o SQL para as tabelas pai.
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Clients` (
`Case_Number` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
`Address` CHAR(50) NULL ,
`Phone_Number` INT(10) NULL ,
PRIMARY KEY (`Case_Number`) )
ENGINE = InnoDB
CREATE TABLE IF NOT EXISTS `Alternative_Pathways`.`Staff` (
`Emp_ID` INT NOT NULL ,
`First_Name` CHAR(10) NULL ,
`Middle_Name` CHAR(10) NULL ,
`Last_Name` CHAR(10) NULL ,
PRIMARY KEY (`Emp_ID`) )
ENGINE = InnoDB
I'estou supondo que Clientes.Case_Number
e/ou Staff.Emp_ID
não são exatamente o mesmo tipo de dados que Clientes_has_Staff.Clients_Case_Number
e Clientes_has_Staff.Staff_Emp_ID
.
Talvez as colunas nas tabelas-mãe sejam INT UNSIGNED
?
Eles precisam ser exatamente o mesmo tipo de dados em ambas as tabelas.
Motivos pelos quais você pode obter um erro de restrição de chave estrangeira:
Actualização:
ON DELETE SET NULL
não está definida para ser nula. Portanto, certifique-se de que a coluna está definida como padrão como nula.Vê isto.