无法在MySQL中创建表

时间:2014-10-28 23:18:56

标签: 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);

2 个答案:

答案 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()