Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法在MySQL中创建表_Mysql - Fatal编程技术网

无法在MySQL中创建表

无法在MySQL中创建表,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

我无法在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));
需要注意的是,这取决于版本-您可能必须使用外键col_名称而不是col_名称。我更喜欢没有它的语法,但是一些版本强制您使用FOREIGN-keytile,而不是上一个SQL中的title

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

注意-我没有运行它,我相信你会通知如果有任何其他问题-我没有检查语法,只是修复了你报告的错误-引用不存在。。。
P.S.P.S.始终检查语法

这不起作用,因为创建表的顺序不正确

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

例如,请看这里的这一部分:

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或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);
您不仅没有定义任何列,也没有引用任何内容。这也将抛出一个错误。外键标题必须引用movies表中的某些列。除此之外,几年内都不能创建外键引用。主要是因为您无法为不是另一个表中主键的列创建外键,以及为什么需要为同一个表创建两个外键

这些问题也存在于其他CREATETABLE语句中,所以考虑到我所说的一切,请返回并查看每个CREATETABLE语句

这里有一个你可以参考的作品

编辑


我还想补充一点,我不建议使用char数据类型

如果你想让别人调试你的代码,你应该发布你得到的错误…Key column\u name在table error中不存在。这是我第一次使用SQL,不知道如何在外键中创建一个table你引用的表还不存在。从studio开始。@Swag你在这里有很多事情要做。我已经解决了我所看到的所有问题,并为一份工作声明举了一个例子。如果你是认真学习MySQL的,我强烈建议你。我试着把表整理好,但是任何包含外键语句的行似乎都有错误。我不知道如何在外键中使用ALTER语法。现在修复了引用的语法。。添加了语法书的链接。。。我是一个Oracle的人,每个DBMS都有一点不同的语法-总是检查手册中的这些…它起作用了吗?还是更多语法错误?注意varchar与char之间的差异,并将其更改为适当的最大长度…@McAdam331-语法正确-唯一的问题是指向错误的列…@swag-我运行了当前语法,它可以工作。。因此,如果您有任何其他问题,请告诉我。。注意:您不能引用年份。。您需要引用主键或具有唯一索引的列。。