首页 > 解决方案 > 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

标签: mysqlsqlindexingmariadbcreate-table

解决方案


MariaDB 不支持不可见索引 - 与 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

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


推荐阅读