Внешние ключи MySQL

Я попытался создать внешние ключи в моей таблице Movie_Copies, которая ссылается на первичные ключи в таблицах Movie_Details и Customer_Details, но, похоже, у меня это не работает, и синтаксическая ошибка, которая появляется, похоже, связана с индексацией.

-- -----------------------------------------------------
-- Table `Movie_Renting`.`Movie_Details`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Movie_Renting`.`Movie_Details` (
  `Movie_ID` VARCHAR(20) NOT NULL,
  `Movie_Title` VARCHAR(256) NOT NULL,
  `Release_Date` DATE NOT NULL,
  `Run_Time` VARCHAR(10) NOT NULL,
  `Genre` VARCHAR(20) NOT NULL,
  `Rating` INT NOT NULL,
  `Number_of_Copies` INT NOT NULL,
  PRIMARY KEY (`Movie_ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Movie_Renting`.`Customer_Details`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Movie_Renting`.`Customer_Details` (
  `Customer_ID` VARCHAR(10) NOT NULL,
  `Customer_Name` VARCHAR(800) NOT NULL,
  `Address_Line_One` VARCHAR(100) NOT NULL,
  `Address_Line_Two` VARCHAR(100) NULL,
  `Town` VARCHAR(90) NOT NULL,
  `Post_Code` VARCHAR(8) NOT NULL,
  `Contact_Number` VARCHAR(12) NOT NULL,
  `Email_Address` VARCHAR(345) NOT NULL,
  PRIMARY KEY (`Customer_ID`))
ENGINE = InnoDB;


-- -----------------------------------------------------
-- Table `Movie_Renting`.`Movie_Copies`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `Movie_Renting`.`Movie_Copies` (
  `Copy_ID` VARCHAR(10) NOT NULL,
  `Movie_ID` VARCHAR(10) NOT NULL,
  `Platform` VARCHAR(20) NOT NULL,
  `Customer_ID` VARCHAR(45) NOT NULL,
  `Rent_Out` DATE NOT NULL,
  `Duration_Weeks` INT NOT NULL,
  `Return_Date` DATE NOT NULL,
  `Customer_Details_Customer_ID` VARCHAR(10) NOT NULL,
  PRIMARY KEY (`Copy_ID`),
  INDEX `fk_Movie_Copies_Movie_Details_idx` (`Movie_ID` ASC) VISIBLE,
  INDEX `fk_Movie_Copies_Customer_Details1_idx` (`Customer_ID` ASC) VISIBLE,
  CONSTRAINT `fk_Movie_Copies_Movie_Details`
    FOREIGN KEY (`Movie_ID`)
    REFERENCES `Movie_Renting`.`Movie_Details` (`Movie_ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Movie_Copies_Customer_Details1`
    FOREIGN KEY (`Customer_ID`)
    REFERENCES `Movie_Renting`.`Customer_Details` (`Customer_ID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Ключевое слово VISIBLE недоступно, если вы не используете MySQL 8.0 или новее. Вы можете безопасно удалить его, если используете MySQL <8.0

Nick 11.12.2018 10:36

Я только что попробовал, но получаю сообщение об ошибке; ОШИБКА 1064 (42000): у вас есть ошибка в синтаксисе SQL; проверьте руководство, соответствующее вашей версии сервера MySQL, чтобы найти правильный синтаксис рядом с '' fk_Movie_Copies_Movie_Details_idx '(' Movie_ID 'ASC), INDEX' fk_Movie_Copies_C 'в строке 10

Bretty135 11.12.2018 10:44

Я вырезал и вставил ваш код (без VISIBLE) на свой сервер MySQL 5.6, и он отлично работает.

Nick 11.12.2018 10:46

Я заметил, что длины строк столбцов в таблице Movie_Copies не совпадают с длинами соответствующих столбцов в таблицах Customer_Details и Movie_Details. Я знал, что MySQL немного нервничает по поводу подобных вещей.

Brian Hooper 11.12.2018 12:14
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
Освоение архитектуры микросервисов с Laravel: Лучшие практики, преимущества и советы для разработчиков
В последние годы архитектура микросервисов приобрела популярность как способ построения масштабируемых и гибких приложений. Laravel , популярный PHP...
Как построить CRUD-приложение в Laravel
Как построить CRUD-приложение в Laravel
Laravel - это популярный PHP-фреймворк, который позволяет быстро и легко создавать веб-приложения. Одной из наиболее распространенных задач в...
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
Освоение PHP и управление базами данных: Создание собственной СУБД - часть II
В предыдущем посте мы создали функциональность вставки и чтения для нашей динамической СУБД. В этом посте мы собираемся реализовать функции обновления...
Документирование API с помощью Swagger на Springboot
Документирование API с помощью Swagger на Springboot
В предыдущей статье мы уже узнали, как создать Rest API с помощью Springboot и MySql .
Роли и разрешения пользователей без пакета Laravel 9
Роли и разрешения пользователей без пакета Laravel 9
Этот пост изначально был опубликован на techsolutionstuff.com .
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
Как установить LAMP Stack - Security 5/5 на виртуальную машину Azure Linux VM
В предыдущей статье мы завершили установку базы данных, для тех, кто не знает.
0
4
26
0

Другие вопросы по теме