MySql problema Alter - FOREIGN KEY

Installazione, configurazione e uso di Ubuntu come server: web, ftp, mail, news, proxy, dns e altro.
generalekamikaze
Prode Principiante
Messaggi: 54
Iscrizione: mercoledì 12 maggio 2010, 20:50

MySql problema Alter - FOREIGN KEY

Messaggio da generalekamikaze »

Salve ragazzi, ho un grosso problema con un database(si tratta di un esercizio per un esame!).
Bene. Il concetto è semplice. Devo infatti modificare una tabella pre-esistente e non vuota(motore=Innodb)aggiungendo un vincolo referenziale con chiave esterna verso una tabella da me creata.
allora, la tabella creata da me è questa (alla quale la seconda fa riferimento):

Codice: Seleziona tutto

CREATE TABLE Filiali(
                      Nro_filiale CHAR(1) PRIMARY KEY,
                      Nome_filiale CHAR(20),
                      Sede_filiale CHAR(20),
                      Nro_dipendenti INTEGER
)TYPE=INNODB;
La tabella che ospite, che ha bisogno di referenziare la prima è questa:

Codice: Seleziona tutto

CREATE TABLE Scorte(
	Codice_libro CHAR(4) REFERENCES Libri(Codice_libro),
	Nro_filiale CHAR(1),
	Nro_copie_disponibili DECIMAL(1,0) DEFAULT 0,
	Data_controllo DATE,
	PRIMARY KEY(Codice_libro, Nro_filiale)
) TYPE=INNODB;
Bene...

Io dò questo comando:

Codice: Seleziona tutto

ALTER TABLE Scorte ADD CONSTRAINT FOREIGN KEY (Nro_filiale) REFERENCES Filiali(Nro_filiale);
Questa è la risposta di MySql:

Codice: Seleziona tutto

ERROR 1005 (HY000): Can't create table 'HenrysBooksDB090202_1.#sql-59f_2a' (errno: 150)
Ho letto parecchio in giro. qualcuno dice che dovrebbero essere dei problemi di accesso, ma così non è. Infatti sono root e se così fosse non riuscirei neppure a creare la tabella.
Bene. Non so che pesi pigliare...Illuminatemi!!
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: MySql problema Alter - FOREIGN KEY

Messaggio da garak »

devi avere un index sulla colonna a cui aggiungi la chiave esterna
generalekamikaze
Prode Principiante
Messaggi: 54
Iscrizione: mercoledì 12 maggio 2010, 20:50

Re: MySql problema Alter - FOREIGN KEY

Messaggio da generalekamikaze »

Ehm..:Scusa l'ignoranza, che intendi per index???
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: MySql problema Alter - FOREIGN KEY

Messaggio da garak »

generalekamikaze ha scritto: Ehm..:Scusa l'ignoranza, che intendi per index???
temo che tu abbia un problema più grosso per il tuo esame, se non sai cos'è un index... :(
http://dev.mysql.com/doc/refman/5.1/en/ ... index.html
generalekamikaze
Prode Principiante
Messaggi: 54
Iscrizione: mercoledì 12 maggio 2010, 20:50

Re: MySql problema Alter - FOREIGN KEY

Messaggio da generalekamikaze »

Prenditela con la professoressa, gli indici non fanno parte del programma.
Comunque non dovrebbe essre questo il problema, infatti la guida dice :
Normally, you create all indexes on a table at the time the table itself is created with CREATE TABLE
Quindi l'index esiste già.
Domani controllo nello specifico la base di dati, perché dopo queste ne ho create parecchie, tutte effettuando la stesso operazione correttamente!
Ti farò sapere!
Tra l'altro l'index è opzionale:
ADD [CONSTRAINT [symbol]]
        FOREIGN KEY [index_name] (index_col_name,...)
        reference_definition
Ultima modifica di generalekamikaze il giovedì 27 gennaio 2011, 21:06, modificato 1 volta in totale.
Ptah
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1269
Iscrizione: mercoledì 13 dicembre 2006, 13:19
Contatti:

Re: MySql problema Alter - FOREIGN KEY

Messaggio da Ptah »

Io ho provato ad eseguire le stesse query che hai scritto e non ho avuto problemi...
Quello che ti dice il server è che non puoi creare la tabella blablabla...sicuro di essere root quando tenti di creare la chiave?
Non è che per caso non hai i permessi di alter? Prova ad eseguire questa

Codice: Seleziona tutto

ALTER TABLE `Scorte` CHANGE `Nro_copie_disponibili` `Nro_copie_disponibili` TINYINT( 1 ) UNSIGNED NULL DEFAULT '0'
Se ti da ancora errore allora l'utente non ha permessi di "alter"...


A parte questo...perchè le due chiavi primarie sono varchar? :o
Le chiavi primarie, nella norma, sono interi (mediumint o int) perchè è molto più veloce cercare con numeri che con lettere...
Non sono chi dico di essere ;) || Problema risolto?Metti [RISOLTO] nel titolo ;)
Script per Firewall Iptables
Guida Php ufficiale (in inglese)
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: MySql problema Alter - FOREIGN KEY

Messaggio da garak »

generalekamikaze ha scritto: Comunque non dovrebbe essre questo il problema, infatti la guida dice :
Normally, you create all indexes on a table at the time the table itself is created with CREATE TABLE
Quindi l'index esiste già.
Hai problemi anche con l'inglese: la guida ti dice che normalmente gli indici si creano al momento della creazione della tabella. Non ti sta dicendo che si creano da soli, ti sta dicendo che di solito uno li crea contestualmente alla tabella (ma può anche crearli dopo).
Comunque, la documentazione relativa all'aggiunta di indici è questa: http://dev.mysql.com/doc/refman/5.1/en/ ... index.html

Se vuoi un consiglio su come imparare mysql più facilmente: usa phpMyAdmin (è nel repository): ha un'interfaccia grafica e dopo ogni comando eseguito ti mostra la sua sintassi.
Avatar utente
garak
Entusiasta Emergente
Entusiasta Emergente
Messaggi: 1649
Iscrizione: lunedì 13 giugno 2005, 13:37
Desktop: Gnome
Distribuzione: Ubuntu 24.04
Sesso: Maschile
Località: Roma
Contatti:

Re: MySql problema Alter - FOREIGN KEY

Messaggio da garak »

Ptah ha scritto: A parte questo...perchè le due chiavi primarie sono varchar? :o
Le chiavi primarie, nella norma, sono interi (mediumint o int) perchè è molto più veloce cercare con numeri che con lettere...
Non è vero, un indice su un campo CHAR ha la stessa velocità di un intero.
Su un VARCHAR invece no, ma non è questo il caso.
generalekamikaze
Prode Principiante
Messaggi: 54
Iscrizione: mercoledì 12 maggio 2010, 20:50

Re: MySql problema Alter - FOREIGN KEY

Messaggio da generalekamikaze »

Seguirò il consiglio Gerak, ma solo dopo l'esame.
Per ora devo fare le cose nel modo in cui me le hanno fatte vedere (dire al Professore, solo ciò che vuole davvero sapere!).
Comunque Gerak, ti assicuro che ne ho fatte ormai una decina di queste alterazioni senza l'utilizzo di indici, so che magari, detto da qualcuno che ha appena iniziato, può sembrarti "strano", non ti chiedo di prendertela, ma di crederci! Sicuro come dici tu è un modo sbagliato, ma funziona!

Ptah appena provo ti faccio sapere! Per quanto riguarda la chiave (oltre a ciò che ti ha risposto garak) il concetto è che stò manipolando tabelle pre-create,non sono io che ho progettato la base di dati!

Dato che ci siete, vorrei farvi una domandina stupidina... Devo creare una Vista di nome TipiLibro@HenrysDowntown (non chiedetemi di cambiargli nome, DEVO chiamarla così!) ma ho un problema proprio nell'utilizzo del carattere "@"!
CREATE VIEW TipiLibro_HenrysDowntown AS SELECT DISTINCT l.Tipo_libro FROM Libri l,Scorte s,Filiali f WHERE l.Codice_libro = s.Codice_libro AND s.Nro_filiale = f.Nro_filiale AND Nome_filiale = 'Henrys Downtown';
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''TipiLibro@HenrysDowntown' AS SELECT DISTINCT l.Tipo_libro FROM Libri l,Scorte s' at line 1

Edit: Garet, ma per indici si intendono le chiavi???
Ultima modifica di generalekamikaze il domenica 30 gennaio 2011, 13:27, modificato 1 volta in totale.
Scrivi risposta

Ritorna a “Ubuntu su server”

Chi c’è in linea

Visualizzano questa sezione: Bing [Bot] e 4 ospiti