MySQL MariaDB 不会使用外键创建 Table

MySQL MariaDB wont create Table with a foreign key

我的 SQL Table 有问题。所以我有我的用户table:

CREATE TABLE IF NOT EXISTS `user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NICKNAME` varchar(50) NOT NULL,
  `PASSWORD` varchar(255) NOT NULL,
  `EMAIL` varchar(50) DEFAULT NULL,
  PRIMARY KEY (`NICKNAME`),
  UNIQUE KEY `ID` (`ID`)
) ;

这个 table 已经存在并且创建时没有任何问题。我想像这样创建乐谱 Table:

CREATE TABLE IF NOT EXISTS `scores` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NICKNAME` varchar(50) NOT NULL,
  `HIGHSCORE` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  FOREIGN KEY (NICKNAME) REFERENCES USER(Nickname)
)

在执行查询时我得到了这个错误消息:

**#1005 - Kann Tabelle `xxxxx`.`scores` nicht erzeugen (Fehler: 150 "Foreign key constraint is incorrectly formed") (Details…)**

它是德语的,说不能创建 Table,错误 150,我看不出关键约束在哪里错误,我在 postgreSQL 中使用了相同的语法并且它工作正常,但不知何故MySQL 不接受。有什么想法吗?

这很奇怪。如果 nickname 确实是主键,那么您的代码应该可以工作。

不过,使用自增列作为主键更为自然。如果你想要昵称,那么在查询的时候使用join。

所以:

CREATE TABLE IF NOT EXISTS `scores` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  UserId int(11) NOT NULL,
  `NICKNAME` varchar(50) NOT NULL,
  `HIGHSCORE` int(11) NOT NULL,
  PRIMARY KEY (`ID`),
  FOREIGN KEY (UserId) REFERENCES USER(Id)
);

user - 是关键字。

使用另一个 table 名称可能是个好主意,例如"tblUser", 或者再次使用引号``

FOREIGN KEY (NICKNAME) REFERENCES `USER`(ID) 

多亏了 Gordon Linoff 先生,我才能够找到我的错误:

我必须将 NICKNAME 声明为 UNIQUE,然后才能将 FOREIGN KEY 约束添加到其他表

CREATE TABLE IF NOT EXISTS `user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `NICKNAME` varchar(50) NOT NULL,
  `PASSWORD` varchar(255) NOT NULL,
  `EMAIL` varchar(100) DEFAULT NULL,
  PRIMARY KEY (`NICKNAME`),
  UNIQUE KEY `ID` (`ID`),
  UNIQUE KEY `NICKNAME` (`NICKNAME`)
);