为什么我使用以下sql命令获得“无法添加外键约束”错误?

时间:2015-05-08 05:20:00

标签: mysql

在MySQL服务器上运行以下命令时出错。

CREATE TABLE users (
    userID INT NOT NULL AUTO_INCREMENT,
    PRIMARY KEY(userID),
    firstname VARCHAR(100) NOT NULL,
    lastname VARCHAR(100) NOT NULL,
    username VARCHAR(120) NOT NULL UNIQUE,
    hashpass VARCHAR(100) NOT NULL
) ENGINE=INNODB ;


CREATE TABLE posts (
    postID INT AUTO_INCREMENT,
    text VARCHAR(1000),
    imageURI VARCHAR(100),
    userID VARCHAR(120) NOT NULL, 

    PRIMARY KEY(postID),

    FOREIGN KEY (userID)
    REFERENCES users (userID)
    ON DELETE CASCADE,

    tags VARCHAR(500)
) ENGINE=INNODB;

我收到以下错误:

Cannot add foreign key constraint

2 个答案:

答案 0 :(得分:1)

尝试在外键上使用相同类型的主键 - users.userID int - posts.userID

<强> WORKING SQL FIDDLE

试试这样:

CREATE TABLE users (
userID INT NOT NULL AUTO_INCREMENT,
PRIMARY KEY(userID),
firstname VARCHAR(100) NOT NULL,
lastname VARCHAR(100) NOT NULL,
username VARCHAR(120) NOT NULL UNIQUE,
hashpass VARCHAR(100) NOT NULL
) ENGINE=INNODB ;


CREATE TABLE posts (

postID INT AUTO_INCREMENT,
text VARCHAR(1000),
imageURI VARCHAR(100),
userID INT NOT NULL,     <---Change here

PRIMARY KEY(postID),

FOREIGN KEY (userID)
REFERENCES users (userID)
ON DELETE CASCADE,

tags VARCHAR(500)
) ENGINE=INNODB;

答案 1 :(得分:0)

你的外键

userID VARCHAR(120) NOT NULL, 

不同
userID INT NOT NULL AUTO_INCREMENT,