Можете да проверите състоянието на InnoDB (SHOW ENGINE INNODB STATUS
), за да се определи точната причина, поради която ограниченията са неуспешни. Другата опция е да добавите ограниченията на външния ключ след създаване на таблицата.
Във вашия случай изглежда, че ви липсва типът на двигателя. Типовете колони също трябва да съвпадат. Първичният ключ в посочените таблици най-вероятно са 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;