为啥我的脚本在执行时出现错误 1064

Posted

技术标签:

【中文标题】为啥我的脚本在执行时出现错误 1064【英文标题】:why is there error 1064 in my script when i executed it为什么我的脚本在执行时出现错误 1064 【发布时间】:2019-05-21 13:14:02 【问题描述】:

mysql

错误代码:1064。您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 7 行的 ') ENGINE = InnoDB' 附近使用正确的语法

CREATE TABLE IF NOT EXISTS `game_review`.`users` (
  `user_id` INT NOT NULL AUTO_INCREMENT,
  `email_address` VARCHAR(45) NOT NULL,
  `password` VARCHAR(6) NOT NULL,
  `username` VARCHAR(20) NOT NULL,
  PRIMARY KEY (`user_id`),
  UNIQUE INDEX `user_id_UNIQUE` (`user_id` ASC) VISIBLE)
ENGINE = InnoDB;

我希望它能够正确执行,因为我使用我创建的 ER 图对其进行了前向工程,但它给了我上面的错误消息。

【问题讨论】:

什么是VISIBLE?这似乎不是MariaDB CREATE TABLE documentation 中的关键字。 @DavidMaze 在 MySQL 8 中支持不可见索引。 我实际上不确定,因为我才开始使用这个 1 个月,所以我只是推进工程,它给了我这个结果。但仍然非常感谢您编辑我的问题。非常感谢 删除UNIQUE INDEX 行;这是多余的,因为PRIMARY KEY 是唯一索引。 【参考方案1】:

MariaDB 不支持不可见索引,因此不使用 VISIBLEINVISIBLE 关键字。默认情况下,优化器已经可以看到索引,因此您可以使用:

UNIQUE INDEX user_id_UNIQUE (user_id)

但是,主键列应该已经是唯一的,因此您甚至可以不包括唯一索引。

旁注:MySQL 8+ 确实支持不可见索引see here,但您的 MariaDB 版本似乎不支持它们。

【讨论】:

非常感谢。当我添加这个 UNIQUE INDEX user_id_UNIQUE (user_id) 时它可以工作,但我可以问一下 ASC 怎么样?我的 MariaDB 版本是 10.1.36-MariaDB MySQL/MariaDB 上的索引默认应该是升序的,所以你可以省略ASC 关键字。 对不起先生,我还有另一个问题。我的另一张桌子有错误。这是错误代码:1064。您的 SQL 语法有错误;检查与您的 MariaDB 服务器版本相对应的手册,以在第 7 行的 'INDEX user_id_idx (iduser ASC) VISIBLE, INDEX game_id_idx (idgame A' 附近使用正确的语法 使用INDEX user_id_idx (iduser), INDEX game_id_idx (idgame)

以上是关于为啥我的脚本在执行时出现错误 1064的主要内容,如果未能解决你的问题,请参考以下文章

使用此命令时出现错误,我不知道为啥? [复制]

在 mysql 中创建触发器时出现错误“1064”?

为啥在尝试运行此可执行文件时出现错误?

运行查询以创建表时出现错误 1064?

为啥我尝试保存游戏时出现错误?统一 C#

mysql - 使用关键字作为列名时出现错误 1064 (42000)