繁体   English   中英

无法在MySQL中创建表

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM