tabela 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 | | | |
+----------+-------------+------+-----+---------+----------------+
tabela2
+------------------+--------------+------+-----+---------+----------------+
| 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 | | | |
+------------------+--------------+------+-----+---------+----------------+
Erro:
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`))
O que eu fiz de errado? Eu li http://www.w3schools.com/Sql/sql_foreignkey.asp e eu não'não vejo o que'está errado.
Você'está recebendo este erro porque você'está tentando adicionar/atualizar uma linha para table2
que não tem um valor válido para o campo UserID
baseado nos valores atualmente armazenados na table1
. Se você postar mais algum código, eu posso ajudá-lo a diagnosticar a causa específica.
Se você tiver inserido uma linha na tabela 1 antes de criar a chave estrangeira na tabela 2, então você receberá um erro de restrição de chave estrangeira, porque o valor do incremento automático é 2 na tabela 1 e 1 na tabela 2. Para resolver isto, você tem que truncar a tabela 1 e definir o valor do incremento automático de volta para 1. Então você pode adicionar a tabela 2.