簡體   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