有什么想法为什么下面的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
ASC)上创建唯一索引code
查询错误(1064):第1行“ VISIBLE”附近的语法错误在
uuid_UNIQUE
(setting
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
答案 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
检查以下屏幕截图:
答案 1 :(得分:1)
在工作台中: 模型>模型选项...> MySQL =>取消选中“使用全局设置中的默认值
答案 2 :(得分:0)
5.7或6.3的替代版本。我用6.3。在模型>模型选项..> MySql> 6.3
上