Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL创建一个可为空的外键,该外键引用同一表上的id字段_Mysql_Sql Server_Foreign Keys_Self Referencing Table - Fatal编程技术网

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

MySQL创建一个可为空的外键,该外键引用同一表上的id字段,mysql,sql-server,foreign-keys,self-referencing-table,Mysql,Sql Server,Foreign Keys,Self Referencing Table,我正在尝试将Post表中的“in_reply_to”字段设置为可为空的外键,该外键引用同一表中的id字段。基本上是这样的,如果这个字段为空,那么帖子就不是对另一篇帖子的回复——如果它为非空,那么 post是对具有匹配id的帖子的回复(如果有意义的话)。但是当我通过mysql运行我的文件时,我得到了以下错误 错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法(160) , 外键(userID)引用用户(userID), 外键(在第6行的“

我正在尝试将Post表中的“in_reply_to”字段设置为可为空的外键,该外键引用同一表中的id字段。基本上是这样的,如果这个字段为空,那么帖子就不是对另一篇帖子的回复——如果它为非空,那么 post是对具有匹配id的帖子的回复(如果有意义的话)。但是当我通过mysql运行我的文件时,我得到了以下错误

错误1064(42000):您的SQL语法有错误;检查手册 对应于您的MySQL服务器版本,以便使用正确的语法(160) , 外键(userID)引用用户(userID), 外键(在第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)
);

因此,如果您有任何关于如何使其引用post id的建议,我将不胜感激。

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

请换

postContent(160),
到,例如

postContent varchar(160),
如果您希望回复中的列
为空,请更改

in_reply_to INT NOT NULL,


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


错误是
postContent(160),
,我想应该是
postContent VARCHAR(160),
。您的实际外键很好。虽然我建议您希望在回复中
不为null--
在回复中
不为INT null,
而不是回复中
不为null,
谢谢,我不敢相信我竟然忘记了这么愚蠢的事情。谢谢您的帮助和提示,我运行了它,没有错误:)真是个愚蠢的错误,谢谢你的帮助和提示。运行它没有错误!谢谢,我去看看
in_reply_to INT,