Impossibile aggiungere o aggiornare una riga figlia: fallisce un vincolo di chiave esterna

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.

Commentari (10)

Significa che stai cercando di inserire in table2 un valore UserID che non esiste in table1.

Commentari (0)

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.

Commentari (0)