问题描述
我无法为自己的一生找出问题所在。我在MysqL工作台中创建了ERD和关系,并向其中吐出了这段代码。我将其转发工程到我的dbms中,并且出现此错误。
Executing sql script in server
ERROR: Error 1064: You have an error in your sql Syntax; check the manual that
corresponds to your MariaDB server version for the right Syntax to use near ')
ENGINE = InnoDB' at line 10
sql Code:
-- -----------------------------------------------------
-- Table `deadiade_golfbag`.`users`
-- -----------------------------------------------------
CREATE TABLE IF NOT EXISTS `deadiade_golfbag`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,`first_name` VARCHAR(150) NOT NULL,`last_name` VARCHAR(250) NULL,`professional` BINARY(1) NOT NULL DEFAULT 0,PRIMARY KEY (`id`,`professional`),UNIQUE INDEX `id_UNIQUE` (`id` ASC) VISIBLE)
ENGINE = InnoDB
sql script execution finished: statements: 5 succeeded,1 Failed
Fetching back view deFinitions in final form.
nothing to fetch
解决方法
MariaDB不支持不可见索引-与MySQL不同,MySQL在8.0版中添加了此功能。
MariaDB 10.5的解析器似乎允许VISIBLE
(尽管它在INVISIBLE
上失败),但是我怀疑它基本上会忽略它。在早期版本中,它仅在VISIBLE
上失败。
VISIBLE
仍然是默认设置,因此您可以将该关键字分开(以及索引列上的ASC
也是默认设置):
CREATE TABLE IF NOT EXISTS `deadiade_golfbag`.`users` (
`id` INT NOT NULL AUTO_INCREMENT,`first_name` VARCHAR(150) NOT NULL,`last_name` VARCHAR(250) NULL,`professional` BINARY(1) NOT NULL DEFAULT 0,PRIMARY KEY (`id`,`professional`),UNIQUE INDEX `id_UNIQUE` (`id`)
) ENGINE = InnoDB
请注意,在两个列和上具有主键并在这两个列之一上具有唯一索引是没有意义的:唯一键比主键更具限制性。