Bandau persiųsti savo naują schemą į savo db serverį, bet negaliu suprasti, kodėl gaunu šią klaidą. Bandžiau ieškoti atsakymo čia, bet viskas, ką radau, sako, kad reikia arba nustatyti db variklį Innodb, arba įsitikinti, kad raktai, kuriuos bandau naudoti kaip svetimus raktus, yra pirminiai raktai savo lentelėse. Jei neklystu, padariau abu šiuos dalykus. Ar galite pasiūlyti kokią nors kitą pagalbą?
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
SQL scenarijaus vykdymas baigtas: teiginiai: 7 pavyko, 1 nepavyko
Toliau pateikiame pagrindinių lentelių SQL.
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
Spėju, kad Clients.Case_Number
ir (arba) Staff.Emp_ID
nėra lygiai tokio paties tipo duomenys kaip Clients_has_Staff.Clients_Case_Number
ir Clients_has_Staff.Staff_Emp_ID
.
Galbūt tėvinių lentelių stulpeliai yra INT UNSIGNED
?
Abiejose lentelėse jie turi būti lygiai to paties duomenų tipo.
Priežastys, dėl kurių galite gauti svetimo rakto apribojimo klaidą:
Atnaujinta:
ON DELETE SET NULL
, nėra apibrėžtas kaip nulinis. Taigi įsitikinkite, kad stulpelis yra nustatytas pagal nutylėjimą null.Patikrinkite šiuos dalykus.