MySQL 不会将多个外键添加到同一个 table
MySQL won't add foreign key more than one foreign key to same table
我在 Ubuntu 16.04 LTS 上使用 Navicat 时遇到问题,我正在尝试执行脚本,但它在最后 table 说无法添加外键约束,这是我的脚本,有人知道我哪里错了吗?
谢谢指教
这是我的 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
您的 Prijave
table 有两个 FK 指向您的 Studenti
table。 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`),
我在 Ubuntu 16.04 LTS 上使用 Navicat 时遇到问题,我正在尝试执行脚本,但它在最后 table 说无法添加外键约束,这是我的脚本,有人知道我哪里错了吗?
谢谢指教
这是我的 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
您的 Prijave
table 有两个 FK 指向您的 Studenti
table。 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`),