2012-09-21 147 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的工作版本中予以纠正。 –