PDA

Visualizza la versione completa : [MySQL] ERROR 1005: Can't create table (errno: 150)


ludodudu
23-07-2013, 16:37
Ciao, sto provando a creare la seguente tabella



create table messaInScena
(
data date,
ora time,
spazio varchar(20),
spettacolo varchar(40),
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)
) ;


ma mi da il seguente errore:
Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)

Le tabelle a cui fanno riferimento le chiavi esterne sono:



create table spazio
(
nome varchar(20) primary key,
indirizzo varchar(40) not null,
pianta varchar(20),
capienza smallint
);

create table spettacolo
(
titolo varchar(40) primary key,
descrizione LONGBLOB,
annoProduzione char(4)
);


ho già verificato che le fk siano uniche e che non ci siano errori di battitura (ma date un controllo pure voi che non si sa mai :D ). Come si può vedere i campi di riferimento sono chiavi primarie. tra campi di riferimento e chiavi esterne i tipi e le dimensioni coincidono..

dove sbaglio???

ps. se serve posto tutte le tabelle

bomberdini
23-07-2013, 17:09
Originariamente inviato da ludodudu
ma mi da il seguente errore:
Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)

Le tabelle a cui fanno riferimento le chiavi esterne sono:



create table spazio
(
nome varchar(20) primary key,
indirizzo varchar(40) not null,
pianta varchar(20),
capienza smallint
);

create table spettacolo
(
titolo varchar(40) primary key,
descrizione LONGBLOB,
annoProduzione char(4)
);




Error Code: 1005 Can't create table 'teatrosql.messainscena' (errno: 150)
e' solo questa la dicitura dell'errore?


ps sicuramente si ma, le hai effettivamente create le 2 tabelle : spazio e spettacolo si? :)

ludodudu
23-07-2013, 17:16
Si si le due tabelle ovviamente le ho create :)
e la dicitura dell'errore è esattamente quella che ho inserito "Error Code: 1005
Can't create table 'teatrosql.messainscena' (errno: 150)"

Tabelle db (http://imageshack.us/photo/my-images/706/t2eg.png/)

ludodudu
23-07-2013, 18:10
Ho risolto.
Prima di tutto ho controllato lo stato di InnoDB, e la ragione del problema era "on delete set null" così ho cambiato la query in questo modo


create table messaInScena
(
data date,
ora time,
spazio varchar(20),
spettacolo varchar(40),
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 cascade,
foreign key (spettacolo) references spettacolo(titolo) on update cascade on delete cascade,
constraint RA3_1 check (postiDisponibili >= 0)
) ;


ora funziona!

mydb
23-07-2013, 18:31
Originariamente inviato da ludodudu
Ho risolto.
Prima di tutto ho controllato lo stato di InnoDB, e la ragione del problema era "on delete set null" così ho cambiato la query in questo modo


create table messaInScena
(
data date,
ora time,
spazio varchar(20),
spettacolo varchar(40),
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 cascade,
foreign key (spettacolo) references spettacolo(titolo) on update cascade on delete cascade,
constraint RA3_1 check (postiDisponibili >= 0)
) ;


ora funziona!

mi fa piacere che funziona.

Ma,cosi hai dato un senso diverso al tuo progetto... :D

ludodudu
23-07-2013, 18:40
Originariamente inviato da mydb
mi fa piacere che funziona.

Ma,cosi hai dato un senso diverso al tuo progetto... :D

Sono ancora in fase di creazione delle tabelle, quindi se hai una soluzione alternativa è ben accetta :D

in the web
23-07-2013, 22:20
Per esempio usare degli id numerici come chiavi primarie :)

mydb
24-07-2013, 10:58
per me va bene il progetto dicevo solo che :

prima avevi indicato : ON DELETE SET NULL
ora hai indicato : ON DELETE CASCADE

quindi hai mutato la logica ossia a seguito di delete accadono 2 cose diverse.

Se per te va bene non ci sono problemi :D

ludodudu
24-07-2013, 11:03
:) alla fine ho riguardato il diagramma e alla fine la modifica che ho fatto va bene anche per la logica complessiva...
grazie!

Loading