Vous pouvez vérifier le statut d'InnoDB (SHOW ENGINE INNODB STATUS
) pour déterminer la raison exacte de l'échec des contraintes. L'autre option consiste à ajouter les contraintes de clé étrangère après avoir créé la table.
Dans votre cas, il semble qu'il vous manque le type de moteur. Les types de colonne doivent également correspondre. Les clés primaires des tables référencées sont très probablement NOT NULL
, et ils ne le sont pas dans 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;