SQL错误1064:您的SQL语法有错误

问题描述

我无法为自己的一生找出问题所在。我在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

请注意,在两个列上具有主键并在这两个列之一上具有唯一索引是没有意义的:唯一键比主键更具限制性。