mysql - 为什么使用以下 sql 命令会出现 "Cannot add foreign key constraint"错误?

标签 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

最佳答案

尝试在外键上也使用相同类型的主键 - 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;

关于mysql - 为什么使用以下 sql 命令会出现 "Cannot add foreign key constraint"错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30116341/

相关文章:

php - MySql - 如何将多个 WHERE 子句与 OR 一起使用

mysql - MySQL中如何检查3个字段是否唯一?

mysql - 在 flutter 上向我的本地主机发出 HTTP 请求不起作用

mysql - 如果第一个查询返回 NULL,则从第二个查询返回默认数据

mysql - MySQL中的时序数据 : Sampling

c# - 连接表,获取对象引用未设置

php - HTML/PHP post 方法

mysql - 不能在查询中使用 MySQL session 变量

mysql - 铁路协会

MySQL - 不同无关表之间的单个查询与多个查询