InnoDBのステータスを確認できます(SHOW ENGINE INNODB STATUS
)制約が失敗している正確な理由を特定します。もう1つのオプションは、テーブルの作成後に外部キー制約を追加することです。
あなたの場合、エンジンタイプが不足しているようです。列タイプも一致する必要があります。参照されるテーブルの主キーは、ほとんどの場合NOT NULL
です。 、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;