tabella 1
+----------+-------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+----------------+
| UserID | int(11) | NO | PRI | NULL | auto_increment |
| Password | varchar(20) | NO | | | |
| Username | varchar(25) | NO | | | |
| Email | varchar(60) | NO | | | |
+----------+-------------+------+-----+---------+----------------+
tabella2
+------------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+------------------+--------------+------+-----+---------+----------------+
| UserID | int(11) | NO | MUL | | |
| PostID | int(11) | NO | PRI | NULL | auto_increment |
| Title | varchar(50) | NO | | | |
| Summary | varchar(500) | NO | | | |
+------------------+--------------+------+-----+---------+----------------+
Errore:
com.mysql.jdbc.exceptions.MySQLIntegrityConstraintViolationException:
Cannot add or update a child row: a foreign key constraint fails
(`myapp/table2`, CONSTRAINT `table2_ibfk_1` FOREIGN KEY (`UserID`)
REFERENCES `table1` (`UserID`))
Cosa ho fatto di sbagliato? Ho letto http://www.w3schools.com/Sql/sql_foreignkey.asp e non vedo cosa c'è di sbagliato.
Stai ricevendo questo errore perché stai cercando di aggiungere/aggiornare una riga alla tabella2
che non ha un valore valido per il campo UserID
in base ai valori attualmente memorizzati nella tabella1
. Se pubblichi altro codice posso aiutarti a diagnosticare la causa specifica.
Se avete inserito una riga nella tabella 1 prima di creare la chiave esterna nella tabella 2, allora otterrete un errore di vincolo di chiave esterna, perché il valore di incremento automatico è 2 nella tabella 1 e 1 nella tabella 2. Per risolvere questo problema devi troncare la tabella 1 e impostare il valore di incremento automatico di nuovo a 1. Poi puoi aggiungere la tabella 2.