这里的问题是不同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}
但是,这个选项{VISIBLE |无法在MySQL Server 5.7中使用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中:
去:
Edit > Preferences > Modeling > MySQL.
然后,将“Default Target MySQL Version”设置为5.7
查看下面的截图: