fbcyborg
08-01-2010, 15:32
Salve a tutti,
ho un problema quando vado a fare l'UPDATE di alcuni campi di una tabella, a causa dei vincoli di foreign key.
Ho due tabelle, descritte come segue:
Tabella ContoCorrente con numero di conto e banca:
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NUM | int(11) | NO | PRI | 0 | |
| BANCA | varchar(30) | NO | PRI | | |
+---------+-------------+------+-----+---------+-------+
Tabella Fattura (semplificata) con id,totale,numero conto corrente di addebito e banca:
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| ID | varchar(30) | NO | PRI | | |
| TOTALE | float(10,2) | YES | | NULL | |
| NUM_CONTO | int(11) | YES | MUL | NULL | |
| BANCA | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
Per quanto riguarda la tabella fattura ho 2 foreign key, ovvero:
FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`)
Ovvero voglio che quando indico un conto corrente insieme al nome della banca, quel contocorrente/banca deve stare nella tabella contocorrente.
Per quanto riguarda l'inserimento non ci sono problemi.
Il problema è che quando vado a fare una update, mi va in errore.
Es.:
UPDATE FATTURA SET BANCA="Unicredit" AND NUM_CONTO=1235 where ID="1234";
Ovviamente in contocorrente è presente una tupla con:
BANCA="Unicredit" e NUM=1235.
L'errore che ottengo è il seguente:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`FATTURA`, CONSTRAINT `fattura_ibfk_1` FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`))
Più o meno intuisco il motivo per cui accade (quei valori sono proprio linkati ai corrispondenti nella tabella contocorrente) però non riesco ancora ad inquadrare come aggirare il problema.
Una soluzione potrebbe essere quella di togliere il vincolo di foreign key, ma prima vorrei sapere se c'è qualche altro modo.
Qualcuno mi sa aiutare?
ho un problema quando vado a fare l'UPDATE di alcuni campi di una tabella, a causa dei vincoli di foreign key.
Ho due tabelle, descritte come segue:
Tabella ContoCorrente con numero di conto e banca:
+---------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+---------+-------------+------+-----+---------+-------+
| NUM | int(11) | NO | PRI | 0 | |
| BANCA | varchar(30) | NO | PRI | | |
+---------+-------------+------+-----+---------+-------+
Tabella Fattura (semplificata) con id,totale,numero conto corrente di addebito e banca:
+-----------+-------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+-------------+------+-----+---------+-------+
| ID | varchar(30) | NO | PRI | | |
| TOTALE | float(10,2) | YES | | NULL | |
| NUM_CONTO | int(11) | YES | MUL | NULL | |
| BANCA | varchar(30) | YES | | NULL | |
+-----------+-------------+------+-----+---------+-------+
Per quanto riguarda la tabella fattura ho 2 foreign key, ovvero:
FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`)
Ovvero voglio che quando indico un conto corrente insieme al nome della banca, quel contocorrente/banca deve stare nella tabella contocorrente.
Per quanto riguarda l'inserimento non ci sono problemi.
Il problema è che quando vado a fare una update, mi va in errore.
Es.:
UPDATE FATTURA SET BANCA="Unicredit" AND NUM_CONTO=1235 where ID="1234";
Ovviamente in contocorrente è presente una tupla con:
BANCA="Unicredit" e NUM=1235.
L'errore che ottengo è il seguente:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`FATTURA`, CONSTRAINT `fattura_ibfk_1` FOREIGN KEY (`NUM_CONTO`, `BANCA`) REFERENCES `CONTOCORRENTE` (`NUM`, `BANCA`))
Più o meno intuisco il motivo per cui accade (quei valori sono proprio linkati ai corrispondenti nella tabella contocorrente) però non riesco ancora ad inquadrare come aggirare il problema.
Una soluzione potrebbe essere quella di togliere il vincolo di foreign key, ma prima vorrei sapere se c'è qualche altro modo.
Qualcuno mi sa aiutare?