Mysql
 sql >> Database >  >> RDS >> Mysql

MySQL ERROR 1005:Impossibile creare la tabella (errno:150)

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;