Możesz sprawdzić stan InnoDB (SHOW ENGINE INNODB STATUS
), aby określić dokładny powód, dla którego ograniczenia nie działają. Inną opcją jest dodanie ograniczeń klucza obcego po utworzeniu tabeli.
W Twoim przypadku wygląda na to, że brakuje Ci typu silnika. Typy kolumn również muszą być zgodne. Klucz podstawowy w tabelach, do których się odwołuje, najprawdopodobniej NOT NULL
, a nie są tak w 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;