2012-09-21 185 views
3

我在創建包含複合鍵和主鍵的SQL表時遇到了問題。這是我現在所擁有的:SQL表中有複合鍵和主鍵

CREATE TABLE Racunar (
    IPAdresa char(15) PRIMARY KEY, 
    CPU char(20), 
    HD char(20) 
); 

CREATE TABLE Program (
    Naziv char(15), 
    Verzija char(20), 
    Datum char(11), 
    PRIMARY KEY(Naziv, Verzija) 
); 

CREATE TABLE Operater (
    SifO int PRIMARY KEY, 
    Ime char(20), 
    BrTel char(20) 
); 

CREATE TABLE JeInstaliran (
    IPAdresa char(15) FOREIGN KEY REFERENCES Racunar(IPAdresa), 
    SifO int FOREIGN KEY REFERENCES Operater(SifO), 
    FOREIGN KEY(Naziv, Verzija) REFERENCES Program(Naziv, Verzija), 
    DatumInstalacije char(11) 
); 

問題出在最後一個表的某處。我正在使用SQL Fiddle,並且在嘗試構建架構後返回了下一條錯誤消息:

架構創建失敗:您的SQL語法有錯誤;檢查對應於你的MySQL服務器版本使用附近的 正確的語法手冊「外鍵參考Racunar(IPAdresa), SIFO INT FOREIGN KEY參考歌劇院」第2行:

我不知道爲什麼這不起作用,所以我會很感激任何幫助。提前致謝。

+0

看起來像JeInstaliran表要使用它沒有列作爲重點(Naviz,Verzija)定義它的列定義之後。嘗試先定義這些列。 – bdares

回答

1

語法不正確。相反,與列一起定義FOREIGN KEY的,使用語法FOREIGN KEY (colname) REFERENCES tablename (foreign_colname)

CREATE TABLE JeInstaliran (
    IPAdresa char(15), 
    SifO int, 
    Naziv char(15), 
    Verzija char(20), 
    FOREIGN KEY (IPAdresa) REFERENCES Racunar(IPAdresa), 
    FOREIGN KEY (SifO) REFERENCES Operater(SifO), 
    FOREIGN KEY(Naziv, Verzija) REFERENCES Program(Naziv, Verzija), 
    DatumInstalacije char(11) 
); 
+0

非常感謝!更正了我的代碼,現在它可以工作。這是最後的表看起來像現在: CREATE TABLE JeInstaliran( IPAdresa CHAR(15), Naziv CHAR(15), Verzija CHAR(15), SIFO INT, DatumInstalacije CHAR(11), FOREIGN KEY(Naziv,Verzija)參考程序(Naziv,Verzija), FOREIGN KEY(IPAdresa)參考Racunar(IPAdresa), FOREIGN KEY(SIFO)REFERENCES操作符(SifO) ); – user1687538

+0

@Catcall一個疏忽,在上面糾正,並在OP的工作版本中予以糾正。 –