1

我试图使 Post 表中的“in_reply_to”字段成为可空外键,该外键引用同一表上的 id 字段。基本上,如果此字段为空,则该帖子不是对另一个帖子的回复——如果它不为空,那么该帖子是对具有匹配 id 的帖子的回复,如果这有意义的话。但是当我通过 mysql 运行我的文件时,我收到以下错误。

ERROR 1064 (42000):您的 SQL 语法有错误;检查与您的 MySQL 服务器版本相对应的手册,以在 '(160) 、 FOREIGN KEY (userID) REFERENCES users(userID)、 FOREIGN KEY (in_reply_' 在第 6 行查询 OK,0 行受影响 (0.36 秒) 附近使用正确的语法)

所以它说我写的命令有问题,但我无法确定我做错了什么。

这是sql文件的内容

CREATE DATABASE siteData CHARACTER SET utf8 COLLATE utf8_general_ci;

 USE siteData;

 CREATE TABLE users (
userID INT PRIMARY KEY AUTO_INCREMENT,
name VARCHAR(40),
email VARCHAR(40),
password VARCHAR(125)
);

 CREATE TABLE post (
postID INT NOT NULL PRIMARY KEY AUTO_INCREMENT,
userID INT,
post_date TIMESTAMP(6),
in_reply_to INT NOT NULL,
postContent(160),
    FOREIGN KEY (userID) REFERENCES users(userID),
    FOREIGN KEY (in_reply_to) REFERENCES post(postID)   
); 

 CREATE TABLE follow (
userID INT,
followerID INT,
PRIMARY KEY (userID,followerID),

FOREIGN KEY (userID)
        REFERENCES users(userID),
FOREIGN KEY (followerID)
        REFERENCES users(userID)
);

因此,如果您对如何使其引用帖子的 id 有任何指示,我将不胜感激。

4

2 回答 2

2

问题不在于外键。您尚未声明 column 的类型postContent

请更换

postContent(160),

例如

postContent varchar(160),

如果您希望您的列in_reply_to可以为空,请更改

in_reply_to INT NOT NULL,

in_reply_to INT,
于 2015-09-03T11:07:06.237 回答
1

帖子表中缺少字段 postContent 的数据类型。但这不是使外键为空的正确方法。仍然有一个技巧可以做到这一点。您可以查看以下链接。

mySQL中的外键和NULL

于 2015-09-03T11:15:22.723 回答