代码之家  ›  专栏  ›  技术社区  ›  Buddhika Lakshan

您的SQL语法有错误;请查看与MySQL服务器版本相对应的手册,以获得在“VISIBLE[duplicate]附近使用的正确语法

  •  0
  • Buddhika Lakshan  · 技术社区  · 6 年前

    你知道为什么吗 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_UNIQUE 打开 setting ( code ASC)可见 查询错误(1064):第1行“VISIBLE”附近的语法错误

    创建唯一索引 uuid_UNIQUE 打开 设置 ( uuid ASC)可见 查询错误(1064):第1行“VISIBLE”附近的语法错误

    删除时没有错误 可见的 但是 MySQL工作台8.0.12 自动生成。如何阻止MySQL Workbench这样做?

    我的Ubuntu 18.04中的MySQL信息:

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

    0 回复  |  直到 6 年前
        1
  •  22
  •   Madhur Bhaiya    6 年前

    这里的问题是不同的MySQL服务器版本在语法上的差异。看来 MySQL工作台8.0.12 正在自动生成 CREATE UNIQUE INDEX MySQL服务器的语句 版本8.0 .

    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}
    

    但是,这种选择 {VISIBLE | INVISIBLE} 在中不可用 MySQL服务器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'   /* No option of VISIBLE / INVISIBLE */
    
    index_type:
        USING {BTREE | HASH}
    

    如果不想升级到最新版本的MySQL,可以使用 VISIBLE / INVISIBLE 索引:

    在MySQL Workbench中:

    去:

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

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

    查看以下屏幕截图:

    MySQL WorkBench Modeling

        2
  •  1
  •   Rickobotics    6 年前

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

        3
  •  1
  •   Eduardo Tolentino    6 年前

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