|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 3532
|
[SQL] problema con foreign key....chi mi da una manina?
stò preparando un esame su sql
devo creare queste 2 tabelle ma non ho capito bene come funzionano ste foreign key e infatti mi da quest'errore: Error | 1005 | Can't create table '.\cddb\artist.frm' (errno: 150) il codice è questo: Codice:
CREATE TABLE Artist
(artistid INT(10) UNSIGNED AUTO_INCREMENT NOT NULL,
name CHAR (255) NOT NULL,
index (artistid, name),
FOREIGN KEY (artistid, name) REFERENCES CD(artist,name), # ON UPDATE CASCADE,
countryid CHAR (3) NOT NULL,
website CHAR (255),
description TEXT,
PRIMARY KEY (artistid)) ENGINE=INNODB;
show warnings;
INSERT INTO Artist(artistid,name,countryid,website,description) VALUES (NULL, 'The Chemical Brothers', 'UK', 'http://www.thechemicalbrothers.com', 'blablablablablabla');
INSERT INTO Artist(artistid,name,countryid,website,description) VALUES (NULL, 'Moby', 'USA', 'http://www.moby.com', 'blabla');
INSERT INTO Artist(artistid,name,countryid,website,description) VALUES (NULL, 'Skin', 'UK', 'http://www.skinmusic.net', 'blablabla');
show warnings;
CREATE TABLE CD (
cdid int(10) UNSIGNED AUTO_INCREMENT NOT NULL,
artist int(10) UNSIGNED NOT NULL,
name CHAR (255) NOT NULL,
index (artist,name),
FOREIGN KEY (artist, name) REFERENCES Artist(artistid, name),
title char(255) NOT NULL,
label char(255) NOT NULL,
released date NOT NULL,
PRIMARY KEY (cdid)) ENGINE=INNODB;
INSERT INTO CD (artist,name,title,label,released) VALUES (NULL, 'The Chemical Brothers', 'Push the button', 'EMI', '2005-01-24');
grazie mille |
|
|
|
|
|
#2 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
FOREIGN KEY (artistid, name) REFERENCES CD(artist,name) ON UPDATE CASCADE,
forse così? |
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 3532
|
Quote:
|
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
già #
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
cmq quella riga eliminala non serve
|
|
|
|
|
|
#6 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
quando crei la tabella artista fai riferimento alla tabella cd che non è ancora stata creata, per cui mysql ti da quell'errore.
se vuoi legare la tabella cd ad artista, devi fare riferimento da cd ad artista, e non il contrario. |
|
|
|
|
|
#7 |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 3532
|
l'ho levata e avevi ragione, ora da solo un errore, questo:
ERROR 1216 (23000): Cannot add or update a child row: a foreign key constraint fails |
|
|
|
|
|
#8 |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
nell'ultima riga quando inserisci i valori del cd non devi mettere NULL come artist id ma il valore esatto dell'id corrispondente nella tabella artist.
Un'altra cosa che ho notato ora è che in cd tu referenzi l'artista con artistid e name, puoi usare solo artistid perchè è la chiave di artist. Prova così, io non ho un server mysql ora. |
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Feb 2003
Messaggi: 3532
|
Quote:
vorrei evitare chw quando uno inserisce un record nella tabella CD si debba "ricordare a memoria" l'ID dell'artista. si può fare? cioè...sicuramente si ma forse sbaglio qualcosa concettualemente io |
|
|
|
|
|
|
#10 | |
|
Member
Iscritto dal: Aug 2004
Messaggi: 156
|
Quote:
Per esempio quando tu crei una pagina web (con php,asp,jsp...) per inserire i dati del cd, metti dei textfield per inserire i dati relativi al cd, poi metti un <select> per l'inserimento dell'artista. Fai una query così SELECT artistid,name FROM artist; fai visualizzare name nella lista e assegni artistid come value e prendi questo come valora per fare poi la insert nel database. |
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 13:16.



















