Как исправить ошибку 1064 при создании таблиц с внешними ключами? - PullRequest
0 голосов
/ 11 мая 2019

MySql Workbench сообщает мне, что у меня есть ошибка в синтаксисе SQL, соответствующая моей версии сервера MariaDB, и я не знаю, почему.

Я уже рассматривал другие вопросы, но ни один из них, похоже, не отвечаетпомогите, поэтому я задаю свой вопрос сейчас ... Я действительно не знаю, что не так с моим кодом, и я не знаю, в чем проблема с моим синтаксисом.Я попытался установить некоторые запятые или переименовать столбцы и т. Д., И я изменил версию SQL в модели на версию SQL, которую я использую с xampp.Но все же, после изменения версии, я получаю эту ошибку ...

SQL для создания таблиц (я взял комментарии):

CREATE SCHEMA IF NOT EXISTS `testDB` DEFAULT CHARACTER SET utf8 ;
USE `testDB` ;

CREATE TABLE IF NOT EXISTS `testDB`.`person` (
  `personID` INT NOT NULL AUTO_INCREMENT,
  `firstname` VARCHAR(45) NULL,
  `lastname` VARCHAR(45) NULL,
  PRIMARY KEY (`personID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
  `commentID` INT NOT NULL AUTO_INCREMENT,
  `comment` VARCHAR(45) NOT NULL,
  `person_personID` INT NOT NULL,
  PRIMARY KEY (`commentID`),
  INDEX `fk_comment_person_idx` (`person_personID` ASC) VISIBLE,
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERENCES `testDB`.`person` (`personID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

ИЯ получаю ошибку:

Executing SQL script in server
ERROR: Error 1064: You have an error in your SQL syntax; check the manual that
corresponds to your MariaDB server version for the right syntax to use near '
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERE' at line 9
SQL Code:
        -- -----------------------------------------------------
        -- Table `testDB`.`comment`
        -- -----------------------------------------------------
        CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
          `commentID` INT NOT NULL AUTO_INCREMENT,
          `comment` VARCHAR(45) NOT NULL,
          `person_personID` INT NOT NULL,
          PRIMARY KEY (`commentID`),
          INDEX `fk_comment_person_idx` (`person_personID` ASC) VISIBLE,
          CONSTRAINT `fk_comment_person`
            FOREIGN KEY (`person_personID`)
            REFERENCES `testDB`.`person` (`personID`)
            ON DELETE NO ACTION
            ON UPDATE NO ACTION)
        ENGINE = InnoDB

SQL script execution finished: statements: 6 succeeded, 1 failed

Fetching back view definitions in final form.
Nothing to fetch

1 Ответ

0 голосов
/ 11 мая 2019

Удалите слово VISIBLE в вашем утверждении:

CREATE SCHEMA IF NOT EXISTS `testDB` DEFAULT CHARACTER SET utf8 ;
USE `testDB` ;

CREATE TABLE IF NOT EXISTS `testDB`.`person` (
  `personID` INT NOT NULL AUTO_INCREMENT,
  `firstname` VARCHAR(45) NULL,
  `lastname` VARCHAR(45) NULL,
  PRIMARY KEY (`personID`))
ENGINE = InnoDB;

CREATE TABLE IF NOT EXISTS `testDB`.`comment` (
  `commentID` INT NOT NULL AUTO_INCREMENT,
  `comment` VARCHAR(45) NOT NULL,
  `person_personID` INT NOT NULL,
  PRIMARY KEY (`commentID`),
  INDEX `fk_comment_person_idx` (`person_personID` ASC),
  CONSTRAINT `fk_comment_person`
    FOREIGN KEY (`person_personID`)
    REFERENCES `testDB`.`person` (`personID`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB;

Потому что в MariaDB еще не реализована опция INVISIBLE. Эта опция реализована в ORACLE

...