MySQL Workbench:查询错误(1064):第1行“ VISIBLE”附近的语法错误

时间:2018-10-12 18:22:49

标签: mysql mysql-workbench

有什么想法为什么下面的VISIBLE会引起问题?

CREATE TABLE IF NOT EXISTS `setting` (
  `uuid` INT(10) NOT NULL,
  `type` VARCHAR(255) NOT NULL,
  `code` VARCHAR(255) NOT NULL COMMENT 'An unique name.',
  `value` MEDIUMTEXT NULL DEFAULT NULL,
  `comment` LONGTEXT NULL DEFAULT NULL,
  `created_on` INT UNSIGNED NOT NULL,
  `updated_on` INT UNSIGNED NOT NULL,
  PRIMARY KEY (`uuid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE UNIQUE INDEX `name_UNIQUE` ON `setting` (`code` ASC) VISIBLE;

CREATE UNIQUE INDEX `uuid_UNIQUE` ON `setting` (`uuid` ASC) VISIBLE;

错误:

  

name_UNIQUEsetting ASC)上创建唯一索引code   查询错误(1064):第1行“ VISIBLE”附近的语法错误

     

uuid_UNIQUEsetting ASC)上创建唯一索引uuid   查询错误(1064):第1行“ VISIBLE”附近的语法错误

如果我删除VISIBLE,但 MySQL Workbench 8.0.12 会自动生成该错误。如何阻止MySQL Workbench这样做?

我的Ubuntu 18.04中的MySQL信息:

  

MySQL版本:5.7.23-0ubuntu0.18.04.1通过PHP扩展MySQLi

3 个答案:

答案 0 :(得分:13)

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

MySQL Server 8.0 Docs中,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}

但是, MySQL Server 5.7 中没有{VISIBLE | INVISIBLE}的此选项。来自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'   /* No option of VISIBLE / INVISIBLE */

index_type:
    USING {BTREE | HASH}

如果您不想升级到最新版本的MySQL,请执行以下操作:您可以禁用使用VISIBLE / INVISIBLE索引自动生成的功能:

在MySQL Workbench中:

转到:

  

编辑>首选项>建模> MySQL。

然后,将“默认目标MySQL版本”设置为 5.7

检查以下屏幕截图:

MySQL WorkBench Modeling

答案 1 :(得分:1)

在工作台中: 模型>模型选项...> MySQL =>取消选中“使用全局设置中的默认值

答案 2 :(得分:0)

5.7或6.3的替代版本。我用6.3。在模型>模型选项..> MySql> 6.3