前两个表成功通过,但是当mysql检查器到达第三个表时,它通知我引用键有问题。 这是我的代码:
CREATE TABLE USER(
Username VARCHAR(20) NOT NULL,
Email VARCHAR(50) NOT NULL,
Picture VARCHAR(30),
Points INT(5) DEFAULT 1 NOT NULL,
Password VARCHAR(50) NOT NULL,
Firstname VARCHAR(25) NOT NULL,
Lastname VARCHAR(25) NOT NULL,
PRIMARY KEY(Username)
);
CREATE TABLE THREAD (
ThreadID INT(9) NOT NULL AUTO_INCREMENT,
Title VARCHAR(255) NOT NULL,
PostID int(9) NOT NULL,
PRIMARY KEY (ThreadID)
);
CREATE TABLE POST(
ThreadID INT(9) NOT NULL,
PostID INT(9) NOT NULL AUTO_INCREMENT,
Content TEXT NOT NULL,
NumberOfLines INT(5) NOT NULL,
PRIMARY KEY(ThreadID, PostID),
FOREIGN KEY ThreadID(ThreadID) REFERENCES THREAD(ThreadID)
);
我收到的错误如下:
#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '
PRIMARY KEY(ThreadID, PostID),
FOREIGN KEY fk_ThreadID(ThreadID) REFE' at line 6
我尝试将PRIMARY KEY(ThreadID, PostID)
创建为单独的实体,但这似乎不起作用。
谢谢。
最佳答案
添加到@Schwern,由于主键使用错误而给出错误。下面创建表就可以了。
create table a (
id bigint(20) NOT NULL AUTO_INCREMENT,
col2 varchar(10), primary key (id, col2)
) engine=innodb;
所以自增列必须是主键中的第一个列。
我们广泛使用这种主键在 col2 上对表进行分区 - 要在列上进行范围分区,该列需要成为主键的一部分。
还要提一下,您可以以额外索引为代价获得额外的唯一键
关于mysql - 为什么我无法引用主键?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36533046/