errno 150:外键约束的格式不正确



我已经阅读了有关此错误的几个问题,我要么不明白发生了什么/答案,要么它不适合我的情况。

我已经有一个简单的用户表:

CREATE TABLE user
(
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    username VARCHAR(50) NOT NULL,
    password VARCHAR(64) NOT NULL
);
CREATE UNIQUE INDEX user_username_uindex ON user (username);

我想添加一个引用用户 ID 的帖子表:

CREATE TABLE post
(
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    date DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
    authorID INT NOT NULL,
    imgPath VARCHAR(500),
    postText TEXT NOT NULL,
    CONSTRAINT post_user_id_fk FOREIGN KEY (authorID) REFERENCES user (id) ON DELETE SET NULL
);

但是,第二个表不会被创建,而是抛出标题中提到的错误:

"外键约束格式不正确"。

尝试了一些其他问题的答案提到的(我可能误解了(的事情,例如user.id也变得独特,尽管这不起作用。

有人愿意帮助我并解释问题所在吗?我有更复杂的数据库使用这种方法,它以前从未抛出过错误。

在当前情况下,authorID NOT NULL 是问题所在,但有时很难指出导致错误的原因。有一种简单的方法可以找到导致此错误的原因,您可以使用:显示引擎INNODB状态;

这将在"最新外键错误"部分下显示有关错误的更多详细信息。

更多细节在这里:

https://mariadb.org/mariadb-innodb-foreign-key-constraint-errors/

您需要

authorID中删除NOT NULL

CREATE TABLE post
(
    id INT PRIMARY KEY NOT NULL AUTO_INCREMENT,
    title VARCHAR(200) NOT NULL,
    date DATETIME DEFAULT CURRENT_TIMESTAMP NOT NULL,
    authorID INT ,   -- here NOT NULL was removed
    imgPath VARCHAR(500),
    postText TEXT NOT NULL,
    CONSTRAINT post_user_id_fk FOREIGN KEY (authorID) 
     REFERENCES user (id)  ON DELETE SET NULL
);

DBFiddle 演示

ON DELETE SET NULLNOT NULL列不兼容。

最新更新