2014-10-28 166 views
-1

我無法在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

回答

-1

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

雖然稍後創建這些表,但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

-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 

另外,你必須要在很多其他的問題在這裏。

你不定義在星星任何列在表,你只申報的外鍵:

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