MySQL多个错误,调用时列不存在,表不存在

时间:2019-03-28 22:18:08

标签: mysql sql

学习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);

1 个答案:

答案 0 :(得分:2)

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);

Demo on DB Fiddle


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

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