[英]Unable to create table in MySQL
我无法在MySQL中创建这些表。 对我来说,一切看起来都很完整,但我总是出错。
这是我的SQL:
CREATE TABLE Movies(
title char PRIMARY KEY NOT NULL,
Years date NOT NULL,
length decimal not null,
genre char NOT NULL,
academy_award char not null,
FOREIGN KEY(the_name) REFERENCES Studio,
FOREIGN KEY(directorName) REFERENCES Director);
CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies,
FOREIGN KEY(Years) REFERENCES Movies,
FOREIGN KEY(the_name) REFERENCES MovieStar);
CREATE TABLE Director(
the_name char PRIMARY KEY NOT NULL,
birthdate date NOT NULL,
nationality char NOT NULL);
CREATE TABLE MovieStar(
the_name char PRIMARY KEY NOT NULL,
birthdate date NOT NULL,
address char NOT NULL,
gender char NOT NULL);
CREATE TABLE Studio(
the_name char PRIMARY KEY NOT NULL,
address char NOT NULL);
您遇到的问题是您正在引用不存在的表中的列。
尽管稍后创建这些表,但是DBMS引擎不知道它们将存在。
解决方案-创建不包含不存在的FK的表,并稍后使用“ ALTER TABLE”命令添加这些表。
似乎您知道语法,所以如果您找不到它,我将通知您。
您的语法应如下所示(我所做的只是重新排序,并将char更改为archer ...):
CREATE TABLE Studio(the_name varchar(50) PRIMARY KEY NOT NULL, address varchar(50) NOT NULL);
CREATE TABLE Director(the_name varchar(50) PRIMARY KEY NOT NULL, birthdate date NOT NULL, nationality varchar(50) NOT NULL);
CREATE TABLE Movies(title varchar(50) PRIMARY KEY NOT NULL, Years date NOT NULL,
length decimal not null, genre varchar(50) NOT NULL, academy_award varchar(50) not null,
the_name REFERENCES Studio(the_name), directorname REFERENCES Director(the_name));
CREATE TABLE MovieStar(the_name char PRIMARY KEY NOT NULL, birthdate date NOT NULL, address char NOT NULL, gender char NOT NULL);
CREATE TABLE StarsIn(title REFERENCES Movies(title),movie REFERENCES Movies(title), moviestar REFERENCES MovieStar(the_name));
请注意一点,具体取决于版本-您可能必须使用FOREIGN KEY(col_name)而不是col_name。 我更喜欢没有它的语法,但是例如,某些版本会强制您使用FOREIGN KEY(title)
而不是最后一个SQL中的title
。
您使用的语法-外键名称引用表(列)-您忘记了该列-允许您命名FK。 如果您不使用“外键”,系统将随机分配一个名称。 这通常并不重要,除非您希望数据库设计“干净”并且能够按名称引用它。
PS-我没有运行它,我相信您可以告知是否还有其他问题-我没有检查语法,只是修复了您报告的错误-引用不存在... PSPS始终检查语法... http: //dev.mysql.com/doc/refman/5.1/zh-CN/create-table.html
这不起作用,因为未按正确的顺序创建表。
必须始终先创建父表,因为否则您将尝试引用不存在的列。
例如,在这里看这部分:
CREATE TABLE Movies(title char PRIMARY KEY NOT NULL, Years date NOT NULL,
length decimal not null, genre char NOT NULL, academy_award char not null,
FOREIGN KEY(the_name) REFERENCES Studio, FOREIGN KEY(directorName) REFERENCES Director);
您不能引用表工作室或导演,因为它们甚至不存在。
正确的顺序可能是:
Studio
Movie Star
Director
Movies
StarsIn
此外,这里还有许多其他问题。
您没有在Stars IN表中定义任何列,只声明了外键:
CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies,
FOREIGN KEY(Years) REFERENCES Movies,
FOREIGN KEY(the_name) REFERENCES MovieStar);
您不仅没有定义任何列,而且没有引用任何东西。 这也会引发错误。 您的外键标题必须引用电影表中的某些列。 除此之外,您不能为Years创建外键参考。 通常是因为您无法为不是另一个表中的主键的列创建外键,并且为什么还要在同一表中需要两个外键?
这些问题也存在于其他create table语句中,因此鉴于我所说的一切,请回头查看每个create table语句。
这是一个有效的SQL提琴,您可以将其用作参考。
编辑
我还要补充一点,我不建议使用char数据类型。 请研究使用VARCHAR() 。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.