2011-11-09 183 views
3

我試圖創建一個表,但腳本失敗,只要我的netbeans錯誤數據庫的第一個表。錯誤代碼1005,SQL狀態HY000:無法創建表errno:150

這怎麼解決?

CREATE TABLE filmy 
(
    Film_Id int NOT NULL, 
    Nazwa varchar(250), 
    Adres varchar(250), 
    Data_Utworzenia date, 
    Komentarz varchar(250), 
    Gat_Id int, 
    Sub_Id int, 
    Aut_Id int, 
    User_Id int, 

    Primary Key (Film_Id), 
    CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id), 
    CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id), 
    CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id), 
    CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id) 
) 

回答

10

使用show innodb status - 埋在輸出(圍在中間)是「最後的外鍵錯誤」一節。它會解釋爲什麼表創建失敗。

通常這是由於參考FK字段不存在(錯字,錯誤的表格)或存在字段類型不匹配。 FK鏈接的字段必須完全匹配定義。一個CHAR(1)字段不能FK'd爲char(5)場等......

注:在MySQL 5.5中,這個命令是show engine innodb status(感謝kewpiedoll99)

+0

+1你提醒我關於類型錯誤匹配。 – gbn

+0

謝謝!我發現這個問題是在引用表中的主要''表中的引用之後定義的。 – Malyo

+1

哇! 'show innodb status'對於調試是無價的。非常感謝你! – barclay

0

代碼150是外鍵錯誤。

其中一個引用的表或列不存在(但可能在以後的腳本中)或不匹配type/length/collat​​ion/charset。依次評論他們,看看哪一個。

或者單獨運行ALTER TABLE命令後,所有的創造都運行

0

我當我嘗試爲沒有索引的列添加外鍵時,通常會出現該錯誤;我注意到在你顯示的SQL中沒有關聯的列。

+0

最近的mysql版本現在會爲你創建所需的索引,謝天謝地。 –

1

這裏是我的解決方案:

CREATE TABLE filmy 
( 
    Film_Id   int   NOT NULL, 
    Nazwa    varchar(250)  NULL, 
    Adres    varchar(250)  NULL, 
    Data_Utworzenia date    DEFAULT '0000-00-00', 
    Komentarz   varchar(250)  NULL, 
    Gat_Id   int    NULL, 
    Sub_Id   int    NULL, 
    Aut_Id   int    NULL, 
    User_Id   int    NULL, 
Primary Key (Film_Id, Gat_Id, Sub_Id, Aut_Id, User_Id) 
) ENGINE=INNODB; 

外鍵約束創建的水道,子,AUT &用戶否則IDE不知道有這兩個表存在,使表約束成爲現實後進行! 嘗試:alter table filmy add constraint gatfilmy外鍵(gat_id)引用gat(gat_id)on update限制刪除限制 必須保持一致;要麼命名錶gat或gatunek,它不能兩者兼而有之。如果你沒有定義它們,cpu如何知道哪個是gat或gatunek? 現在嘗試其餘的約束條件,並記住你要創建所有的表格,然後才能改變它們!

CONSTRAINT fk_GatFilmy FOREIGN KEY (Gat_Id) REFERENCES gatunek(Gat_Id), 
CONSTRAINT fk_SubFilmy FOREIGN KEY (Sub_Id) REFERENCES subgatunek(Sub_Id), 
CONSTRAINT fk_AutFilmy FOREIGN KEY (Aut_Id) REFERENCES autor(Aut_Id), 
CONSTRAINT fk_UserFilmy FOREIGN KEY (User_Id) REFERENCES users(User_Id) 
+0

這是基本的秩序問題:) – Malyo

0

可以用這個表名(filmy)與其他表的關係,然後丟棄它。檢查任何關係,並刪除你使用這個表名或改變你的表名,例如使用「filmy1」 我改變了我的表名然後它工作。

我希望這項工作。

相關問題