mysql - MySQL多个错误,列不存在,调用时表不存在
问题描述
学习 MySQL,我正在尝试创建数据库、创建表、插入信息。
在使用外键创建表时,我得到以下信息:
错误代码:1072。表 0.000 秒中不存在键列“idFamous”
在插入数据时,我得到以下信息:
错误代码:1146。表 'practice.people' 不存在 0.000 秒
如果我尝试这样做,我也会遇到同样的错误Select * From People
。
我只熟悉非常基本的python,因此尝试重新组织创建表/列的顺序,以便它们在另一个创建外键之前存在。这似乎没有任何效果。
CREATE TABLE Famous (
idFamous INT NOT NULL PRIMARY KEY,
FamousFor VARCHAR(45) NOT NULL
);
CREATE TABLE People (
idPeople int NOT NULL PRIMARY KEY,
FirstName VARCHAR(45) NOT NULL,
LastName VARCHAR(45) NOT NULL,
DOB DATE NOT NULL,
Nationality VARCHAR(45) NOT NULL,
FOREIGN KEY (idFamous) REFERENCES Famous(idFamous)
);
INSERT INTO Famous VALUES (01,'Computer Scientist');
INSERT INTO People VALUES (102,'Larry','Page',3/26/1973,'American',01);
解决方案
表的声明People
是无效的SQL,并产生错误:
表中不存在键列“idFamous”
要设置外键,首先需要声明列。该列必须与被引用的列具有相同的数据类型和大小。
将您的表声明更改为:
CREATE TABLE People (
idPeople int NOT NULL PRIMARY KEY,
FirstName VARCHAR(45) NOT NULL,
LastName VARCHAR(45) NOT NULL,
DOB DATE NOT NULL,
Nationality VARCHAR(45) NOT NULL,
idFamous INT NOT NULL, -- declare the referencing column
FOREIGN KEY (idFamous) REFERENCES Famous(idFamous) -- then make a foreign key
);
INSERT
注意:您的陈述也存在问题,该date
列需要被引用并格式化为yyyy-mm-dd
. 这个:
INSERT INTO People VALUES (102,'Larry','Page',3/26/1973,'American',01);
会产生如下错误:
日期值不正确:“DOB”列的“0.000058481811961479”
应该写成:
INSERT INTO People VALUES (102,'Larry','Page','1973-03-26','American',01);
此外,正如 Raymond Nijland 所评论的,作为InnoDB 唯一的功能,在语句FOREIGN KEY
中使用显式设置可能是个好主意,因此它不依赖于默认的表存储引擎配置设置。因此:Engine = InnoDB
CREATE TABLE
CREATE TABLE People (
...
) Engine = InnoDB;
推荐阅读
- c++ - c++ 中的函数重载如何在没有 Diamond 继承的情况下工作?
- amazon-web-services - AWS - 从/向 AWS 存储传输和检索大规模数据的最佳方式
- android - 属性 android:colorForeground 在 API 23 中不起作用
- scala - Spark Structured Streaming:控制台接收器未按预期工作
- c# - NLog 变量在 WebApi 中更改其值
- python - 在python中将循环转换为理解列表
- java - 使用 CacheDir 截屏时获取非法参数异常
- android - AR检测物体变化
- vala - Vala 列表文件夹和子文件夹内容
- java - 如何附加两个不同类型的列表?