我的SQL表出现问题。所以我有我的Usertable:
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`)
) ;
此表已存在且创建没有任何问题。我想创建一个这样的得分表:
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)
)
在执行查询时,我得到了这个errormassage:
**#1005 - Kann Tabelle `xxxxx`.`scores` nicht erzeugen (Fehler: 150 "Foreign key constraint is incorrectly formed") (Details…)**
它用德语说不能创建Table,错误150,我无法看到键约束错误的地方,我在postgreSQL中使用相同的语法并且它工作正常,但不知何故MySQL不接受它。任何想法?
答案 0 :(得分:2)
这很奇怪。如果nickname
确实是主键,那么您的代码应该可以正常工作。
然而,使用自动递增列作为主键更加自然。如果您想要昵称,请在查询时使用连接。
所以:
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)
);
答案 1 :(得分:1)
user - 是一个关键字。
使用其他表格名称可能是个好主意,例如“tblUser” 或再次使用引号``
FOREIGN KEY (NICKNAME) REFERENCES `USER`(ID)
答案 2 :(得分:0)
感谢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`)
);