MySQL 创建一个可以为 null 的外键,该外键引用同一 table 上的 id 字段
MySQL create a nullable foreign key that refers to the id field on the same table
我正在尝试使 Post table 中的 "in_reply_to" 字段成为可空外键,引用相同 table 上的 id 字段。基本上,如果此字段为空,则 post 不是对另一个 post 的回复——如果它非空,则
post 是对具有匹配 ID 的 post 的回复,如果这有意义的话。但是当我 运行 我的文件通过 mysql 我得到以下错误。
ERROR 1064 (42000):您的 SQL 语法有误;检查手册
对应于您的 MySQL 服务器版本,以便在 '(160) 附近使用正确的语法
,
外键(用户 ID)参考用户(用户 ID),
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)
);
因此,如果您对如何使其引用 post 的 ID 有任何指示,我将不胜感激。
不是外键的问题。您尚未声明列 postContent
.
的类型
请更改
postContent(160),
例如
postContent varchar(160),
如果您希望您的列 in_reply_to
可以为空,请更改
in_reply_to INT NOT NULL,
到
in_reply_to INT,
PostTable 中缺少字段 postContent 的数据类型。但这不是使外键为空的正确方法。仍然有一个技巧可以做到这一点。您可以查看以下link.
Foreign keys and NULL in mySQL
我正在尝试使 Post table 中的 "in_reply_to" 字段成为可空外键,引用相同 table 上的 id 字段。基本上,如果此字段为空,则 post 不是对另一个 post 的回复——如果它非空,则 post 是对具有匹配 ID 的 post 的回复,如果这有意义的话。但是当我 运行 我的文件通过 mysql 我得到以下错误。
ERROR 1064 (42000):您的 SQL 语法有误;检查手册 对应于您的 MySQL 服务器版本,以便在 '(160) 附近使用正确的语法 , 外键(用户 ID)参考用户(用户 ID), 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)
);
因此,如果您对如何使其引用 post 的 ID 有任何指示,我将不胜感激。
不是外键的问题。您尚未声明列 postContent
.
请更改
postContent(160),
例如
postContent varchar(160),
如果您希望您的列 in_reply_to
可以为空,请更改
in_reply_to INT NOT NULL,
到
in_reply_to INT,
PostTable 中缺少字段 postContent 的数据类型。但这不是使外键为空的正确方法。仍然有一个技巧可以做到这一点。您可以查看以下link.
Foreign keys and NULL in mySQL