学习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);
答案 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);
此外,正如Raymond Nijland所评论的那样,由于FOREIGN KEY
是仅InnoDB的功能,因此在Engine = InnoDB
语句中使用显式设置的CREATE TABLE
可能是一个好主意,因此不依赖于默认表存储引擎配置设置。因此:
CREATE TABLE People (
...
) Engine = InnoDB;