我正试图在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不为空,groupName
第3行的VARCHAR

最佳答案

MySQL 8.0.2增加了对windowrank函数的支持,使其成为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)
);

09-17 14:03