Du kan kontrollera statusen för InnoDB (SHOW ENGINE INNODB STATUS
) för att fastställa den exakta orsaken till att begränsningarna misslyckas. Det andra alternativet är att lägga till begränsningarna för främmande nyckel efter att ha skapat tabellen.
I ditt fall verkar det som att du saknar motortypen. Kolumntyperna måste också matcha. Primärnycklarna i de refererade tabellerna är troligen NOT NULL
, och de är inte så i messaInScena
.
create table spazio
(
nome varchar(20) NOT NULL primary key,
indirizzo varchar(40) not null,
pianta varchar(20),
capienza smallint
) ENGINE=InnoDB;
create table spettacolo
(
titolo varchar(40) NOT NULL primary key,
descrizione LONGBLOB,
annoProduzione char(4)
) ENGINE=InnoDB;
create table messaInScena
(
data date,
ora time,
spazio varchar(20) NOT NULL,
spettacolo varchar(40) NOT NULL,
postiDisponibili smallint,
prezzoIntero decimal(5,2),
prezzoRidotto decimal(5,2),
prezzoStudenti decimal(5,2),
primary key (data, ora, spazio),
foreign key (spazio) references spazio(nome)
on update cascade on delete set null,
foreign key (spettacolo) references spettacolo(titolo)
on update cascade on delete set null,
constraint RA3_1 check (postiDisponibili >= 0)
) ENGINE=InnoDB;