Я намагаюся переслати мою нову схему на мій сервер баз даних, але я не можу зрозуміти, чому я отримую цю помилку. Я намагався знайти відповідь тут, але все, що я знайшов, говорить про те, що потрібно або встановити двигун бази даних на Innodb, або переконатися, що ключі, які я намагаюся використовувати як зовнішній ключ, є первинними ключами у власних таблицях. Я зробив обидві ці речі, якщо я не помиляюся. Ви можете запропонувати будь-яку іншу допомогу?
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-скрипта: оператори: 7 виконано успішно, 1 не виконано
Ось 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
Я припускаю, що Clients.Case_Number
та/або Staff.Emp_ID
- це не зовсім той самий тип даних, що й Clients_has_Staff.Clients_Case_Number
та Clients_has_Staff.Staff_Emp_ID
.
Можливо, стовпці в батьківських таблицях мають тип INT UNSIGNED
?
Вони повинні бути абсолютно однакового типу даних в обох таблицях.
Причини, через які може виникати помилка обмеження зовнішнього ключа:
Оновлення:
ON DELETE SET NULL
, не визначений як нульовий. Тому переконайтеся, що стовпець за замовчуванням встановлений рівним нулю.Перевірте це.