1 tabula
+----------+-------------+------+-----+---------+----------------+
| 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 | | | |
+----------+-------------+------+-----+---------+----------------+
tabula2
+------------------+--------------+------+-----+---------+----------------+
| 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 | | | |
+------------------+--------------+------+-----+---------+----------------+
Kļūda:
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`))
Ko es esmu izdarījis nepareizi? Es izlasīju http://www.w3schools.com/Sql/sql_foreignkey.asp un neredzu, kas ir nepareizi.
Šī kļūda tiek pieļauta, jo jūs mēģināt pievienot/atjaunināt rindu tabulā2
, kurai nav derīgas UserID
lauka vērtības, pamatojoties uz pašreiz saglabātajām vērtībām tabulā1
. Ja ievietojat vairāk koda, es varu palīdzēt diagnosticēt konkrēto cēloni.
Ja 1. tabulā ir ievietota rinda pirms ārējās atslēgas izveides 2. tabulā, tad tiks pieļauta ārējās atslēgas ierobežojuma kļūda, jo automātiskā pieauguma vērtība 1. tabulā ir 2, bet 2. tabulā - 1. Lai to atrisinātu, 1. tabula ir jāsamazina un automātiskās inkrementācijas vērtība jānosaka atpakaļ uz 1. Pēc tam var pievienot 2. tabulu.