我得到(错误:150 "Foreign key constraint is incorrectly formed"),但引擎设置为 innoDb 并且类型相同



我基本上有两个简单的表,我从articles表中引用用户的主键。引擎被设置为innoDB,如何查看两端的数据类型都是int。

我的好友将相同的表插入到他的数据库中,没有任何错误。他使用XAMPP,如果这很重要的话,我使用Docker

错误消息:

第25行出现错误1005(HY000(:无法创建表CMSArticle(错误号:150"外键约束形成错误"(

CREATE TABLE IF NOT EXISTS USERS (
id int auto_increment primary key,
username varchar(255) NOT NULL,
password varchar(255) NOT NULL,
role ENUM("user", "admin") NOT NULL
);
CREATE TABLE IF NOT EXISTS Article(
id int auto_increment primary key,
userId int NOT NULL,
title varchar(255) NOT NULL,
date date NOT NULL,
content TEXT NOT NULL,
FOREIGN KEY(userId) REFERENCES users(id)
);

如何解决此意外错误?

From"标识符区分大小写":

对象是否区分大小写在一定程度上取决于底层操作系统。基于Unix的系统区分大小写。。。而Mac OS X通常不会,但如果使用UFS卷,则可以。

桌子名称受系统区分大小写的影响,而。。。柱名称从不区分大小写。

数据库很可能位于区分大小写的文件系统上。您以大写字母将表命名为USERS。接下来,从现在起,你必须在所有大写字母中引用它。

尝试:

...
FOREIGN KEY (userid)
REFERENCES USERS
(id)
...

db<gt;小提琴

或者更改配置。

再次从";标识符区分大小写":

lower_case_table_names服务器系统变量起着关键作用。它确定表名是否。。。以区分大小写的方式进行比较。。。如果设置为1(Windows上的默认值(,则名称将以小写形式存储,并且不会以区分大小写的方式进行比较。

附带说明:不要习惯在字符串或日期文本中使用双引号。是的,遗憾的是MySQL和MariaDB接受这一点,但在SQL中,双引号通常用于标识符,如列名。如果你曾经使用过另一个DBMS(或者未来的MySQL或MariaDB版本对此变得更加理智(,你可能会得到一个";无效对象名称";错误字符串或日期文字总是使用单引号。

最新更新