首页 > 解决方案 > 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);

标签: mysqlsql

解决方案


表的声明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);

DB Fiddle 上的演示


此外,正如 Raymond Nijland 所评论的,作为InnoDB 唯一的功能,在语句FOREIGN KEY中使用显式设置可能是个好主意,因此它不依赖于默认的表存储引擎配置设置。因此:Engine = InnoDBCREATE TABLE

CREATE TABLE People (
    ...
) Engine = InnoDB;

推荐阅读