无法在MySQL中创建表格

问题描述:

我无法在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); 
+1

如果您想要某人调试您的代码,您应该发布您正在获取的错误... – evenro 2014-10-28 23:30:16

+0

键列the_name在表错误中不存在。 – Rohit 2014-10-28 23:33:35

+0

这是我第一次使用SQL,不知道如何创建一个表 – Rohit 2014-10-28 23:34:00

您所遇到的问题是,你在引用不存在的表列。

虽然稍后创建这些表,但DBMS引擎不知道它们将存在。

解决方案 - 创建没有不存在的FK的表格,稍后使用“ALTER TABLE”命令添加它们。

好像你知道语法,所以如果你找不到它,我会让你通知我。


你的语法应该像(我所做的是重新排列,并改变焦炭是射手...):

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

一张小纸条,要看版本 - 你” d可能必须使用FOREIGN KEY(col_name)而不是col_name。我更喜欢没有它的语法,但有些版本强迫您在最后一个SQL中使用FOREIGN KEY(title)而不是title

您使用的语法 - 外键名称引用TABLE(列) - 您忘记了列 - 允许您命名FK。如果您不使用“外键”,系统会随机分配一个名称。这通常并不重要,除非您希望DB设计“干净”并能够按名称引用它。

P.S. - 我没有运行它,我相信你通知是否有其他问题 - 我没有检查语法,只是修正了你报告的错误 - 不存在的参考文件... P.S.附:始终检查语法... http://dev.mysql.com/doc/refman/5.1/en/create-table.html

+0

我试着按顺序放置表格,但是包含FOREIGN KEY语句的任何行似乎都有错误。我不知道在外键上使用ALTER语法。 – Rohit 2014-10-28 23:45:26

+0

修正了现在的参考语法..添加了一个链接到语法书...我是一个Oracle人,每个​​DBMS有一点不同的语法 - 总是检查这些手册...... – evenro 2014-10-28 23:48:56

+0

它工作吗?或更多的语法错误?注意varchar和char之间的区别,并将其改为适当的最大长度... – evenro 2014-10-28 23:55:46

这不起作用,因为您的表格没有按照正确的顺序创建。

父表必须始终首先创建,否则您将尝试引用不存在的列。

例如,看这部分在这里:

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 

另外,你必须要在很多其他的问题在这里。

你不定义在星星任何列在表,你只申报的外键:

CREATE TABLE StarsIn(
FOREIGN KEY(title) REFERENCES Movies, 
FOREIGN KEY(Years) REFERENCES Movies, 
FOREIGN KEY(the_name) REFERENCES MovieStar); 

你不仅是没有定义任何列,你是不是引用任何东西。这也会引发错误。您的外键标题必须引用电影表中的某个列。除此之外,您不能为年创建外键参考。主要是因为您不能为另一个表中不是主键的列创建外键,并且为什么您需要两个外键到同一个表中?

这些问题也存在于其他创建表语句中,因此,根据我所说的一切,请返回并查看每个创建的表语句。

下面是一个工作SQL Fiddle,你可以使用作为参考。

编辑

我想补充一点,我不建议使用char数据类型。 Please look into using VARCHAR()