Bạn có thể kiểm tra trạng thái của InnoDB (SHOW ENGINE INNODB STATUS
) để xác định lý do chính xác tại sao các ràng buộc không thành công. Tùy chọn khác là thêm các ràng buộc khóa ngoại sau khi tạo bảng.
Trong trường hợp của bạn, có vẻ như bạn đang thiếu loại động cơ. Các loại cột cũng phải phù hợp. Khóa chính trên các bảng được tham chiếu rất có thể là NOT NULL
và chúng không như vậy trong 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;