Puoi controllare lo stato di InnoDB (SHOW ENGINE INNODB STATUS
) per determinare il motivo esatto per cui i vincoli non vengono rispettati. L'altra opzione consiste nell'aggiungere i vincoli di chiave esterna dopo aver creato la tabella.
Nel tuo caso, sembra che ti manchi il tipo di motore. Anche i tipi di colonna devono corrispondere. Le chiavi primarie nelle tabelle referenziate sono molto probabilmente NOT NULL
, e non lo sono 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;