【问题标题】:Table cannot be created in mysql -Error 1064无法在 mysql 中创建表 - 错误 1064
【发布时间】:2019-05-03 08:28:01
【问题描述】:

我正在尝试使用查询在 MySQL 中创建一个表

CREATE TABLE ofRosterGroups (
  rosterID              BIGINT          NOT NULL,
  rank                  TINYINT         NOT NULL,
  groupName             VARCHAR(255)    NOT NULL,
  PRIMARY KEY (rosterID, rank),
  INDEX ofRosterGroup_rosterid_idx (rosterID)
);

但似乎每次我进行更新时都会抛出错误。我不知道它出了什么问题。

出现的错误是

您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册以获取正确的语法使用 靠近 'rank TINYINT NOT NULL, groupName
第 3 行的 VARCHAR

【问题讨论】:

  • 在mysql服务器上试一下,会出现同样的错误
  • @TimBiegeleisen 这个错误在 MySQL 8 中重现,它不会在 MySQL 5.x 中重现 - 有关详细信息,请参阅我的答案。
  • @Mureinik 是的,我经常看到这个错误。错过了 MySQL 8 部分 +1。

标签: mysql ddl create-table


【解决方案1】:

MySQL 8.0.2 增加了对窗口rank 函数的支持,使其成为reserverd word

您可以使用反引号 (`) 转义它:

CREATE TABLE ofRosterGroups (
  rosterID              BIGINT          NOT NULL,
  `rank`                TINYINT         NOT NULL, -- Here
  groupName             VARCHAR(255)    NOT NULL,
  PRIMARY KEY (rosterID, `rank`), -- And here
  INDEX ofRosterGroup_rosterid_idx (rosterID)
);

但最好只使用不是保留字的名称,例如 rosterRank 而不是 rank

CREATE TABLE ofRosterGroups (
  rosterID              BIGINT          NOT NULL,
  rosterRank            TINYINT         NOT NULL, -- Here
  groupName             VARCHAR(255)    NOT NULL,
  PRIMARY KEY (rosterID, rosterRank), -- And here
  INDEX ofRosterGroup_rosterid_idx (rosterID)
);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-01-26
    • 1970-01-01
    • 2012-10-22
    • 1970-01-01
    相关资源
    最近更新 更多