πίνακας 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 | | | |
+----------+-------------+------+-----+---------+----------------+
table2
+------------------+--------------+------+-----+---------+----------------+
| 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 | | | |
+------------------+--------------+------+-----+---------+----------------+
Σφάλμα:
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`))
Τι έκανα λάθος; Διάβασα το http://www.w3schools.com/Sql/sql_foreignkey.asp και δεν βλέπω τι είναι λάθος.
Λαμβάνετε αυτό το σφάλμα επειδή προσπαθείτε να προσθέσετε/ενημερώσετε μια γραμμή στον "πίνακα2" που δεν έχει έγκυρη τιμή για το πεδίο "UserID" με βάση τις τιμές που είναι αποθηκευμένες στον "πίνακα1". Αν δημοσιεύσετε περισσότερο κώδικα, μπορώ να σας βοηθήσω να διαγνώσετε τη συγκεκριμένη αιτία.
Αυτό σημαίνει ότι προσπαθείτε να εισαγάγετε στον πίνακα 2 μια τιμή "UserID" που δεν υπάρχει στον πίνακα 1.
Εάν έχετε εισαγάγει μια γραμμή στον πίνακα 1 πριν δημιουργήσετε το ξένο κλειδί στον πίνακα 2, τότε θα λάβετε σφάλμα περιορισμού ξένου κλειδιού, επειδή η τιμή αυτόματης αύξησης είναι 2 στον πίνακα 1 και 1 στον πίνακα 2. Για να το λύσετε αυτό πρέπει να αποκόψετε τον πίνακα 1 και να ορίσετε την τιμή αυτόματης αύξησης πίσω στο 1. Στη συνέχεια, μπορείτε να προσθέσετε τον πίνακα 2.