【问题标题】:MySQL Workbench does not generate a databaseMySQL Workbench 不生成数据库
【发布时间】:2019-04-02 02:49:56
【问题描述】:

当我尝试使用 Forward Engineer 生成数据库时,出现这样的错误。

在服务器中执行 SQL 脚本

错误:错误 1064:您的 SQL 语法有错误;检查 与您的 MySQL 服务器版本相对应的手册 在 'VISIBLE, INDEX fk_Personal_Human1_idx 附近使用的语法 (Human_idManASC) 第 12 行可见,CONSTRA'

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 个失败

以最终形式获取回视图定义。 没什么可取的

【问题讨论】:

  • 从索引中删除visible。反正也没用。默认情况下,索引是可见的。
  • 只需删除所有“VISIBLE”约束就可以了

标签: mysql mysql-error-1064


【解决方案1】:

这里的问题是不同 MySQL 服务器版本的语法差异。 MySQL Workbench 8.0 正在为 MySQL 服务器 version 8.0 自动生成 CREATE UNIQUE INDEX 语句。

很可能,您的 MySQL 服务器版本 您可以从 CREATE TABLE 语句中删除 VISIBLE 关键字。如下所示:

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 DocsCREATE 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 中不可用。来自Docs

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}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-08-26
    • 2018-02-28
    • 2011-01-18
    • 2012-10-12
    • 1970-01-01
    • 2014-01-19
    • 2013-11-12
    • 1970-01-01
    相关资源
    最近更新 更多