我已经读过很多关于此错误的问题,或者我不明白发生了什么/答案,或者它不适合我的情况。
我已经有一个简单的用户表:
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);
Run Code Online (Sandbox Code Playgroud)
我想添加一个引用用户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
);
Run Code Online (Sandbox Code Playgroud)
但是不会创建第二个表,而是抛出标题中提到的错误:
“外键约束的格式不正确”。
我尝试了其他问题的答案中提到的一些事情(我可能会误解了),例如使user.id唯一性也起作用,尽管那是行不通的。
有人可以帮我解决问题吗?我有更复杂的数据库使用此方法,并且以前从未抛出过错误。
小智 15
在当前情况下,authorID NOT NULL 是问题所在,但有时不容易指出导致错误的原因。有一种简单的方法可以找到导致此错误的原因,您可以使用:SHOW ENGINE INNODB STATUS;
这将在“最新外键错误”部分下显示有关错误的更多详细信息。
更多细节在这里:
https://mariadb.org/mariadb-innodb-foreign-key-constraint-errors/
您需要删除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
);
Run Code Online (Sandbox Code Playgroud)
ON DELETE SET NULL和NOT NULL列不兼容。
| 归档时间: |
|
| 查看次数: |
5699 次 |
| 最近记录: |