PDA

Visualizza la versione completa : [MySQL] Come impostare le Foreign Keys?


cat82
02-12-2005, 15:46
Salve a tutti,
ho un problema legato a mysql 5.
Ho creato un db InnoDB con MySqlYog 5 sotto ambiente windows2000 in cui ho delle tabelle nelle quali vi sono delle chiavi esterne.Per lavoro uso linux in cui vi installato la stessa versione di mySQL.Con mySqlYog ho esportato la creazione del db in un file .sql. Quando tento di lanciarlo per ricreare il db sotto linux mi crea tutte le tabelle e mi segnala errore in alcune di quelle con la chiave esterna segnalanomi che nn possibile crearle.Se commento nel file .sql la generazione della chiave esterna e lo rilancio allora funzionano.Ma come ben capite nn quello che voglio.
Posto il codice generato dall programma:
KEY `FK_ic_campo` (`ID_Nome_Oggetto`),
CONSTRAINT `ic_campo_ibfk_1` FOREIGN KEY (`ID_Nome_Oggetto`) REFERENCES `ic_nome_oggetto` (`ID`)

Posto l'errore:
"ERROR 1005 (HY000): Can't create table './Contact/ic_rubrica.frm' (errno: 150)
"
Domanda:
1) Forse ho sbagliato a definire le chiavi esterne in MySqlYog?E se si qual' il modo corretto di crearle?

2)Qualcuno sa come creare i riferimenti delle chiavi esterne direttamente in mysql? Per esempio ho due tabelle: 'ic_campo' e 'ic_nome_oggetto'.In 'ic_campo' vi una campo chiamato ID_nome_oggetto che la chiave esterna dell'entit
che usa la chiave primaria di 'ic_nome_oggetto'.

Vi ringrazio per l'aiuto.Ciao

floyd
02-12-2005, 16:40
probabilmente le tabelle non usano il innodb engine
comunque qua (http://dev.mysql.com/doc/refman/5.0/en/alter-table.html) c' la sintassi dell'alter table
una roba del genere
alter table tabella
add constraint
foreign key nome colonna tabella(colonna)

cat82
02-12-2005, 19:08
Le tabelle usano l'innoDB altrimenti non posso impostare le chiavi secondarie.Ho provato come hai detto tu ma niente da fare.Grazie cmq, se hai altri suggerimenti ben accetti.
Ciao

internet
02-12-2005, 20:28
Originariamente inviato da cat82

Posto l'errore:
"ERROR 1005 (HY000): Can't create table './Contact/ic_rubrica.frm' (errno: 150)
"
Domanda:
1) Forse ho sbagliato a definire le chiavi esterne in MySqlYog?E se si qual' il modo corretto di crearle?

1) Dipende anche dall'ordine in cui le tabelle vengono create, spesso mi capitato che un dump non conservasse l'ordine corretto in relazione alla dipendenza che si crea con le foreign key.
Ogni tabella Y, che ha una foreign key a una tabella X, va creata dopo aver gi creato la tabella X.
Controlla che ic_rubrica non si riferisca a una tabella non ancora creata.

2) Gli attributi della tabella referente (Y nel caso di sopra) su cui definisci una foreign Key, devono avere lo stesso tipo degli attributi riferiti, pu capitare ad esempio di mettere UNSIGNED in un attributo e dimenticarsi di riportarlo anche all'altro attributo.



2)Qualcuno sa come creare i riferimenti delle chiavi esterne direttamente in mysql? Per esempio ho due tabelle: 'ic_campo' e 'ic_nome_oggetto'.In 'ic_campo' vi una campo chiamato ID_nome_oggetto che la chiave esterna dell'entit
che usa la chiave primaria di 'ic_nome_oggetto'.

Vi ringrazio per l'aiuto.Ciao




CREATE TABLE ic_nome_oggetto (
ID_nome_oggetto INT PRIMARY KEY
) TYPE=InnoDB;

CREATE TABLE ic_campo(
ID_nome_oggetto INT,
FOREIGN KEY(ID_nome_oggetto) REFERENCES ic_nome_oggetto(ID_nome_oggetto)
) TYPE=InnoDB;

cat82
03-12-2005, 19:05
Grazie mille, mi capitata una cosa curiosa.
Ho creato il dump con "MySQL Administrator" della sun, poi ho caricato il dump con il restore e mi ha segnalato errore sempre nelle tabelle...ho tavanato un po, rilanciato + volte il restore e sempre errore, poi magicamente dopo un po si sono create corrette.
Domanda: Io voglio usare le chiavi esterne, ma guardando anche il db mysql esso non le usa.Non mi crea i file .myd e .myi ma solo i .frm.C' un modo per careare anche questi?
P.S.: Ieri verso le 19 ho postato una richiesta d'aiuto per un JTable.
Non so che fine ha fatto, qualche amministratore pu dirmelo per favore?
Ciao e grazie a tutti :ciauz:

cat82
03-12-2005, 19:08
Mi son sbagliato sul post, l'ho trovato anche se nessuno mi h risposto. :cry:
Ringrazio cmq gli amministratori.
Ciao

alka
03-12-2005, 19:10
Originariamente inviato da cat82
P.S.: Ieri verso le 19 ho postato una richiesta d'aiuto per un JTable.

Scusa per il disagio, sono io che ogni tanto passo e cambio i titoli per renderli conformi alle convenzioni ed estendendone il testo in modo che siano pi facilmente ricercabili attraverso il motore del forum.

Basta comunque che usi il pulsante Cerca in fondo ai tuoi post per recuperare i tuoi messaggi oppure analizzando quelli recenti.

Ciao! :ciauz:

Loading