MySQL Workbench не создает базу данных - PullRequest
0 голосов
/ 29 октября 2018

Когда я пытаюсь сгенерировать базу данных с помощью Forward Engineer, я получаю такую ​​ошибку.

Выполнение сценария SQL на сервере

ОШИБКА: Ошибка 1064: у вас ошибка в синтаксисе SQL; проверить руководство, которое соответствует вашей версии сервера MySQL для права синтаксис для использования рядом с 'VISIBLE, INDEX fk_Personal_Human1_idx (Human_idMan ASC) VISIBLE, CONSTRA 'в строке 12

Код SQL:

    -- -----------------------------------------------------
    -- Table `mydb`.`Personal`
    -- -----------------------------------------------------
    CREATE TABLE IF NOT EXISTS `mydb`.`Personal` (
      `idPersonal` INT NOT NULL,
      `Experience` INT NULL,
      `Department_idDepartment` INT NOT NULL,
      `Date_of_accept` DATE NOT NULL,
      `Date_of_release` DATE NULL,
      `Human_idMan` INT NOT NULL,
      PRIMARY KEY (`idPersonal`),
      INDEX `fk_Personal_Department1_idx` (`Department_idDepartment` ASC) VISIBLE,
      INDEX `fk_Personal_Human1_idx` (`Human_idMan` ASC) VISIBLE,
      CONSTRAINT `fk_Personal_Department1`
        FOREIGN KEY (`Department_idDepartment`)
        REFERENCES `mydb`.`Department` (`idDepartment`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION,
      CONSTRAINT `fk_Personal_Human1`
        FOREIGN KEY (`Human_idMan`)
        REFERENCES `mydb`.`Human` (`idMan`)
        ON DELETE NO ACTION
        ON UPDATE NO ACTION)
    ENGINE = InnoDB

Выполнение сценария SQL завершено: операторы: 7 успешно выполнены, 1 не удалось

Получение определений вида назад в окончательном виде. Ничего не принесло

1 Ответ

0 голосов
/ 29 октября 2018

Проблема здесь заключается в разнице в синтаксисе между различными версиями сервера MySQL. MySQL Workbench 8.0 автоматически генерирует оператор CREATE UNIQUE INDEX для сервера MySQL версия 8.0 .

Скорее всего, ваш сервер MySQL версии <8.0. </strong> Вы можете удалить ключевое слово VISIBLE из вашего оператора CREATE TABLE. Это будет выглядеть следующим образом:

CREATE TABLE IF NOT EXISTS `mydb`.`Personal` (
  `idPersonal` INT NOT NULL,
  `Experience` INT NULL,
  `Department_idDepartment` INT NOT NULL,
  `Date_of_accept` DATE NOT NULL,
  `Date_of_release` DATE NULL,
  `Human_idMan` INT NOT NULL,
  PRIMARY KEY (`idPersonal`),
  INDEX `fk_Personal_Department1_idx` (`Department_idDepartment` ASC),
  INDEX `fk_Personal_Human1_idx` (`Human_idMan` ASC),
  CONSTRAINT `fk_Personal_Department1`
    FOREIGN KEY (`Department_idDepartment`)
    REFERENCES `mydb`.`Department` (`idDepartment`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION,
  CONSTRAINT `fk_Personal_Human1`
    FOREIGN KEY (`Human_idMan`)
    REFERENCES `mydb`.`Human` (`idMan`)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)
ENGINE = InnoDB

Из документов MySQL Server 8.0 синтаксис для CREATE INDEX:

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part: {col_name [(length)] | (expr)} [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'
  | {VISIBLE | INVISIBLE}  -- Notice the option of VISIBLE / INVISIBLE

index_type:
  USING {BTREE | HASH}

Однако этот параметр {VISIBLE | INVISIBLE} недоступен в MySQL Server 5.7 . От Документы :

CREATE [UNIQUE | FULLTEXT | SPATIAL] INDEX index_name
    [index_type]
    ON tbl_name (key_part,...)
    [index_option]
    [algorithm_option | lock_option] ...

key_part:
    col_name [(length)] [ASC | DESC]

index_option:
    KEY_BLOCK_SIZE [=] value
  | index_type
  | WITH PARSER parser_name
  | COMMENT 'string'

index_type:
    USING {BTREE | HASH}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...