我想将3个外键添加到1个表中,但是InnoDB给出了一个错误。我可以自己添加第一个外键,但是其他两个键也会发生相同的错误。语法如下:

CREATE TABLE Lokalen(
Gebouw VARCHAR(20) not null,
Verdieping INT not null,
Lokaal VARCHAR (3) not null,
Beweging BOOLEAN,
Computer BOOLEAN,
primary key (Gebouw, Verdieping, Lokaal));

CREATE TABLE Reserveringen(
Gebouw VARCHAR(20) not null,
Verdieping INT not null,
Lokaal VARCHAR (3) not null,
Begintijd TIME not null,
Eindtijd TIME,
Datum DATE not null,
Reserveringsnummer int not null,
primary key (Reserveringsnummer),
foreign key (Gebouw) REFERENCES Lokalen(Gebouw),
foreign key (Verdieping) REFERENCES Lokalen(Verdieping),
foreign key (Lokaal) REFERENCES Lokalen(Lokaal));


希望你能帮助:)

最佳答案

对于复合FOREIGN KEY,语法为

FOREIGN KEY (Gebouw, Verdieping, Lokaal)
    REFERENCES Lokalen(Gebouw, Verdieping, Lokaal)


我强烈建议使用一个简单的代理键(如自动增量ID),如Localen中的PK和Reserveringen中的FK)。

为避免错误:

DROP TABLE IF EXISTS Lokalen;
DROP TABLE IF EXISTS Reserveringen;

CREATE TABLE Lokalen(
Gebouw VARCHAR(20) not null,
Verdieping INT not null,
Lokaal VARCHAR (3) not null,
Beweging BOOLEAN,
Computer BOOLEAN,
primary key (Gebouw, Verdieping, Lokaal));

CREATE TABLE Reserveringen(
Gebouw VARCHAR(20) not null,
Verdieping INT not null,
Lokaal VARCHAR (3) not null,
Begintijd TIME not null,
Eindtijd TIME,
Datum DATE not null,
Reserveringsnummer int not null,
primary key (Reserveringsnummer),
FOREIGN KEY (Gebouw, Verdieping, Lokaal)
    REFERENCES Lokalen(Gebouw, Verdieping, Lokaal));


代理键的方式

DROP TABLE IF EXISTS Lokalen;
DROP TABLE IF EXISTS Reserveringen;

CREATE TABLE Lokalen(
Id Int Not null auto_increment PRIMARY KEY,
Gebouw VARCHAR(20) not null,
Verdieping INT not null,
Lokaal VARCHAR (3) not null,
Beweging BOOLEAN,
Computer BOOLEAN);

CREATE TABLE Reserveringen(
Id Int not null auto_increment PRIMARY KEY,
LokalenId Int not null,
Begintijd TIME not null,
Eindtijd TIME,
Datum DATE not null,
Reserveringsnummer int not null,

FOREIGN KEY (LokalenId)
    REFERENCES Lokalen(Id));

10-08 17:33