Můžete zkontrolovat stav InnoDB (SHOW ENGINE INNODB STATUS
) určit přesný důvod, proč omezení selhávají. Další možností je přidat omezení cizího klíče po vytvoření tabulky.
Ve vašem případě se zdá, že vám chybí typ motoru. Musí se také shodovat typy sloupců. Primární klíč v odkazovaných tabulkách je s největší pravděpodobností NOT NULL
a v messaInScena
tomu tak není .
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;