MySQL创建一个可以为空的外键,该外键引用同一个表上的id字段

时间:2015-09-03 10:59:36

标签: mysql sql-server foreign-keys self-referencing-table

我试图制作" in_reply_to" Post表中的一个可空外键,指向同一个表上的id字段。基本上如果这个字段为空,那么帖子不是对另一个帖子的回复 - 如果它是非空的那么 post是对具有匹配id的帖子的回复,如果这有意义的话。但是当我通过mysql运行我的文件时,我得到以下错误。

错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便在'(160)附近使用正确的语法 ,                 FOREIGN KEY(userID)REFERENCES用户(userID),                 FOREIGN KEY(in_reply _'第6行 查询正常,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的任何指示,我将不胜感激。

2 个答案:

答案 0 :(得分:1)

问题不在于外键。您尚未声明列2^i*T(n/n) - c(1 - 2^i) = (2^lg n * c) - c(1 - 2^lg n) = (2^lg n * c) - c + (c * 2^lg n) = 2cn - c 的类型。

请更改

postContent

到例如。

postContent(160),

如果您希望列postContent varchar(160), 可以为空,请更改

in_reply_to

in_reply_to INT NOT NULL,

答案 1 :(得分:1)

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

Foreign keys and NULL in mySQL