1

Post テーブルの「in_reply_to」フィールドを、同じテーブルの id フィールドを参照する null 許容の外部キーにしようとしています。基本的に、このフィールドが null の場合、投稿は別の投稿への返信ではありません。null 以外の場合、意味があれば、投稿は一致する ID を持つ投稿への返信です。しかし、mysql でファイルを実行すると、次のエラーが発生します。

エラー 1064 (42000): SQL 構文にエラーがあります。'(160) , FOREIGN KEY (userID) REFERENCES users(userID), FOREIGN KEY (in_reply_' at line 6 Query OK, 0 rows impacted (0.36 sec) 付近で使用する正しい構文については、MySQL サーバーのバージョンに対応するマニュアルを確認してください。 )

したがって、私が書いたコマンドに何か問題があると言っていますが、何が間違っているのかを特定することはできません。

これが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をnull可能にしたい場合は、変更してください

in_reply_to INT NOT NULL,

in_reply_to INT,
于 2015-09-03T11:07:06.237 に答える
1

Post テーブルの postContent フィールドの Datatype が欠落しています。しかし、これは外部キーを null にする正しい方法ではありません。それでもそれを行うにはトリックがあります。以下のリンクで確認できます。

MySQL の外部キーと NULL

于 2015-09-03T11:15:22.723 に答える