2017-04-10 90 views
0

我在Ubuntu 16.04 LTS上遇到Navicat问题,我正在尝试执行脚本,并且它在最后一张表上表示不能添加外键约束,这里是我的脚本,有谁知道我在哪里错了?MySQL不会将外键多于一个外键添加到同一个表

感谢咨询

这里是我的SQL脚本:

CREATE TABLE `SMER` (
    `Ssmer` INT(10) NOT NULL AUTO_INCREMENT, 
    `Nazivs` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`Ssmer`) 
    ); 

CREATE TABLE `Nastavnici` (
    `Snast` INT(10) NOT NULL AUTO_INCREMENT, 
    `Imen` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`Snast`) 
    ); 

CREATE TABLE `PREDMETI` (
    `SPRED` INT(10) NOT NULL AUTO_INCREMENT, 
    `NAZIVP` VARCHAR(255) NOT NULL, 
    PRIMARY KEY (`SPRED`) 
    ); 

CREATE TABLE `Studenti` (
    `Indeks` INT(10) NOT NULL, 
    `Upisan` INT(10) NOT NULL, 
    `Imes` VARCHAR(255) NOT NULL, 
    `Mesto` VARCHAR(255), 
    `Datr` DATETIME NOT NULL, 
    `Ssmer` INT(10) NOT NULL, 
    PRIMARY KEY (`Indeks`, `Upisan`), 
    CONSTRAINT `FK_Studenti_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`) 
    ); 

CREATE TABLE `USLOVNI` (
    `Spred` INT(10) NOT NULL, 
    `UslPredmet` INT(10) NOT NULL, 
    PRIMARY KEY (`Spred`, `UslPredmet`), 
    CONSTRAINT `FK_Uslovni_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Uslovni_UslPredmet` FOREIGN KEY (`UslPredmet`) REFERENCES `PREDMETI` (`SPRED`) 
    ); 

CREATE TABLE `Planst` (
    `Ssmer` INT(10) NOT NULL, 
    `Spred` INT(10) NOT NULL, 
    `Semestar` VARCHAR(255) DEFAULT NULL, 
    PRIMARY KEY (`Ssmer`, `Spred`), 
    CONSTRAINT `FK_Planst_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`), 
    CONSTRAINT `FK_Planst_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`) 
    ); 

CREATE TABLE `Angazovanje` (
    `Snast` INT(10) NOT NULL, 
    `Spred` INT(10) NOT NULL, 
    `Ssmer` INT(10) NOT NULL, 
    PRIMARY KEY (`Snast`, `Spred`, `Ssmer`), 
    CONSTRAINT `FK_Angazovanje_Snast` FOREIGN KEY (`Snast`) REFERENCES `Nastavnici` (`Snast`), 
    CONSTRAINT `FK_Angazovanje_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Angazovanje_Ssmer` FOREIGN KEY (`Ssmer`) REFERENCES `SMER` (`Ssmer`) 
    ); 

CREATE TABLE `Prijave` (
    `Spred` INT(10) NOT NULL, 
    `Indeks` INT(10) NOT NULL, 
    `Upisan` INT(10) NOT NULL, 
    `Snast` INT(10) NOT NULL, 
    `Datump` DATETIME DEFAULT NOW(), 
    `Ocena` INT(2) NOT NULL, 
    PRIMARY KEY (`Spred`, `Indeks`, `Upisan`, `Datump`), 
    CONSTRAINT `FK_Prijave_Spred` FOREIGN KEY (`Spred`) REFERENCES `PREDMETI` (`SPRED`), 
    CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`) REFERENCES `Studenti` (`Indeks`), 
    CONSTRAINT `FK_Prijave_Upisan` FOREIGN KEY (`Upisan`) REFERENCES `Studenti` (`Upisan`), 
    CONSTRAINT `FK_Prijave_Snast` FOREIGN KEY (`Snast`) REFERENCES `Nastavnici` (`Snast`) 
    ); 

以下是错误消息:

 [Err] 1215 - Cannot add foreign key constraint 
+0

粘贴确切的错误信息呢? –

+0

林不知道,但它可能是两个不同的外键对一个和同一个表'Studenti'是不允许的(至少不是所有的MySQL版本)。如果删除其中一个约束,您是否仍然遇到同样的错误?例如,尝试删除行'CONSTRAINT FK_Prijave_Upisan FOREIGN KEY(Upisan)REFERENCES Studenti(Upisan)',并让我们知道如果错误仍然存​​在... –

+0

当我删除该约束时,它也可以工作 – tehnodrom

回答

1

您从Prijave表中的两个FKS指向您Studenti表。 MySQL不能很好地播放。

代替这个试试这个

CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`, `Upisan`) 
           REFERENCES `Studenti` (`Indeks`, `Upisan`), 

CONSTRAINT `FK_Prijave_Indeks` FOREIGN KEY (`Indeks`) REFERENCES `Studenti` (`Indeks`), /* wrong !*/ 
CONSTRAINT `FK_Prijave_Upisan` FOREIGN KEY (`Upisan`) REFERENCES `Studenti` (`Upisan`), 
+0

就是这样。我不知道必须这样做。 – tehnodrom