PDA

View Full Version : [MySql] Dubbio foreign Key


Xizor
16-02-2010, 17:49
Salve a tutti è da poco che metto le mani su MySql, sto provando a capire qualcosa riguardo le Query fra tabelle effettuabili grazie alle foreign key.

Se io creo due tabelle, Artista e Canzone e in Canzone ci metto una chiave esterna che fa riferimento all'artista posso fare una cosa del genere? :

select Titolo from Canzone where Artista.Nome='Nomeartista';

Cioè vorrei farmi dare in output tutti i titoli delle canzoni che l'artista ha fatto, dando in input il suo nome.


Ho provato ma mi dice ERROR 1109 : Tabella 'artisti' sconosciuta in where clause.

Cosa ho sbagliato? Grazie mille! :stordita:

vegeta83ssj
16-02-2010, 18:49
Quello che intendi fare tu si realizza con un JOIN.
Le foreign key servono a garantire in un certo senso l'integrità dei dati.
Nel tuo esempio, una foreign key sul nome dell'artista ti impedisce di inserire canzoni di artisti il cui nome non è presente nella tabella artista.

Ciauz

nuovoUtente86
16-02-2010, 23:02
Il concetto di chiave esterna è un vincolo di integrità abbastanza importante:
pensa ad esempio ad un DB contenente le informazioni sulle immatricolazioni automobilistiche con almeno 2 tabelle AUTO e PROPRIETARI

La prima oltre ai dati peculiari avrà un riferimento all' id del proprietario che costituisce appunto la chiave esterna ed assicura che in ogni momento a partire dalla targa dell' auto sia possibile identificarne il proprietario, se cosi non fosse avremmo auto fantasma.
La chiave esterna comporta quindi che in fase di inserimento di un' auto dovremmo avere la corrispondente tupla per il proprietario e questo non può essere rimosso se ha ancora almeno un' auto intestata.

Xizor
17-02-2010, 09:29
Ah ok, quindi il concetto di chiave esterna mi serve soltanto per garantire l'integrità dei dati soprattutto, giusto?

Quindi se io provo a cancellare un artista, il cui ID è chiave esterna in "Canzone", se ha scritto almeno una canzone, non lo posso cancellare per il concetto di integrità dei dati.

Ho provato e mi dice:

ERRORE 1217 : Impossibile cancellare la riga: un vincolo di integrità referenziale non è soddisfatto.

E' questo quello che intendi tu?

nuovoUtente86
17-02-2010, 11:52
certo

francesco832003
19-02-2010, 13:47
Salve a tutti è da poco che metto le mani su MySql, sto provando a capire qualcosa riguardo le Query fra tabelle effettuabili grazie alle foreign key.

Se io creo due tabelle, Artista e Canzone e in Canzone ci metto una chiave esterna che fa riferimento all'artista posso fare una cosa del genere? :

select Titolo from Canzone where Artista.Nome='Nomeartista';

Cioè vorrei farmi dare in output tutti i titoli delle canzoni che l'artista ha fatto, dando in input il suo nome.


Ho provato ma mi dice ERROR 1109 : Tabella 'artisti' sconosciuta in where clause.

Cosa ho sbagliato? Grazie mille! :stordita:


Ciao,
per fare quello che dici tu dovresti mettere in join le due tabelle:

select c.Titolo from Canzoni c, Artista a where c.uidartista = a.uidartista and a.Nomeartista = 'NomeArtista'

Nella join in grassetto ci va il vincolo di fk