我基本上有两个简单的表,我从articles表中引用用户的主键。引擎被设置为innoDB,如何查看两端的数据类型都是int。
我的好友将相同的表插入到他的数据库中,没有任何错误。他使用XAMPP,如果这很重要的话,我使用Docker
错误消息:
第25行出现错误1005(HY000(:无法创建表CMS
。Article
(错误号: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版本对此变得更加理智(,你可能会得到一个";无效对象名称";错误字符串或日期文字总是使用单引号。