我无法在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);
答案 0 :(得分:-1)
您遇到的问题是您正在引用不存在的表中的列。
虽然您稍后创建这些表,但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。我更喜欢没有它的语法,但有些版本强迫你在最后一个SQL中使用FOREIGN KEY(title)
而不是title
。
您使用的语法 - 外键NAME引用TABLE(列) - 您忘记了列 - 允许您命名FK。如果不使用“外键”,系统将随机分配名称。这通常并不重要,除非您希望数据库设计“干净”并且能够通过名称引用它。
P.S。 - 我没有运行它,我相信你知道是否有任何其他问题 - 我没有检查语法,只修复了你报告的错误 - 不存在的引用... 附:附:始终检查语法... http://dev.mysql.com/doc/refman/5.1/en/create-table.html
答案 1 :(得分:-1)
这不起作用,因为您的表没有以正确的顺序创建。
必须始终首先创建父表,否则您将尝试引用不存在的列。
例如,请在此处查看此部分:
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创建外键引用。主要是因为你不能为另一个表中不是主键的列创建外键,还有为什么你需要两个外键到同一个表?
这些问题也存在于其他创建表语句中,因此,鉴于我所说的一切,请返回查看每个创建表语句。
这是一个可以用作参考的工作SQL Fiddle。
修改强>
我还想补充一点,我不建议使用char数据类型。 Please look into using VARCHAR()