U kunt de status van InnoDB controleren (SHOW ENGINE INNODB STATUS
) om de exacte reden te bepalen waarom de beperkingen niet werken. De andere optie is om de externe-sleutelbeperkingen toe te voegen na het maken van de tabel.
In jouw geval lijkt het erop dat je het motortype mist. De kolomtypen moeten ook overeenkomen. De primaire sleutels in de tabellen waarnaar wordt verwezen zijn hoogstwaarschijnlijk NOT NULL
, en dat is niet zo in 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;