我已经就这个错误读了几个问题,我要么不了解发生的事情/答案,要么就是不适合我的情况。
我已经有了一个简单的用户表:
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
也是唯一的,尽管这不起作用。
有人可以帮我解决问题所在。我有更复杂的数据库使用这种方法,它之前从未抛出错误。
答案 0 :(得分:6)
在当前情况下,authorID NOT NULL是问题所在,但有时指出错误的原因并不容易。有一种简单的方法可以找到导致此错误的原因,您可以使用: 显示引擎的INNODB状态; </ p>
这将在“最新外键错误”部分中显示有关错误的更多详细信息。
更多详细信息在这里:
https://mariadb.org/mariadb-innodb-foreign-key-constraint-errors/
答案 1 :(得分:4)
您需要从NOT NULL
移除authorID
:
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 Demo 强>
ON DELETE SET NULL
和NOT NULL
列不兼容。