ERREUR 1452 (23000): Impossible d'ajouter ou de mettre à jour une ligne enfant: une contrainte de clé étrangère échoue
Quand j'execute la commande SQL suivante:
INSERT INTO test_usershosts (RID,userid,hid,Usr,Pass)
VALUES (NULL,1,1,"user","pass");
J'obtiens le message d'erreur suivant:
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint f
ails (`dm`.`test_usershosts`, CONSTRAINT `test_usershosts_ibfk_1` FOREIGN KEY (`
userid`) REFERENCES `test_users` (`userid`) ON DELETE CASCADE ON UPDATE CASCADE)
Mes tables:
CREATE TABLE IF NOT EXISTS `test_users` (
`userid` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(10) NOT NULL DEFAULT '',
`password` varchar(50) NOT NULL DEFAULT '',
PRIMARY KEY (userid)
) ENGINE=InnoDB;
INSERT INTO `test_users` (`userid`, `username`, `password) VALUES
(1120, 'guest', '12250170a9624f336ca24');
CREATE TABLE IF NOT EXISTS `test_hosts` (
`hid` int(11) NOT NULL AUTO_INCREMENT,
`UID` int(11) NOT NULL,
`name` varchar(100) CHARACTER SET utf8 COLLATE utf8_unicode_ci NOT NULL,
PRIMARY KEY (hid)
) ENGINE=InnoDB;
INSERT INTO `test_hosts` (`hid`, `UID`, `name`) VALUES (30, 10, 'MU');
CREATE TABLE IF NOT EXISTS `test_usershosts` (
`RID` int(11) NULL AUTO_INCREMENT,
`userid` int(11) ,
`hid` int(11) ,
`Usr` varchar(100) ,
`Pass` varchar(100) ,
PRIMARY KEY (RID),
INDEX (userid),
INDEX (hid),
FOREIGN KEY (userid) REFERENCES test_users (userid)
ON DELETE CASCADE ON UPDATE CASCADE,
FOREIGN KEY (hid) REFERENCES test_hosts (hid)
ON DELETE CASCADE ON UPDATE CASCADE
) ENGINE=InnoDB;
J'ai regardé dans beaucoup de cas semblables, mais ne pouvais pas trouver une solution. Toute aide serait appréciée.
OriginalL'auteur Himal | 2012-12-15
Vous devez vous connecter pour publier un commentaire.
La raison pourquoi vous obtenez cette exception, c'est parce que vous êtes l'insertion d'un enregistrement sur la table
test_usershosts
laquelle la valeur de lauserID
n'est pas présent sur la tabletest_users
. De même que la valeur dehid
est pas aussi présent sur la tabletest_hosts
.Table
test_usershosts
dépend de tables:test_users
ettest_hosts
. Donc, assurez-vous que lorsque vous insérez des enregistrements sur la tabletest_usershosts
, les valeurs dehid
etuserid
existe déjà sur les tables parent:test_users
ettest_hosts
.Essayez d'exécuter cette requête et, sûrement, il est inséré.
Je vois que
AUTO_INCREMENT
option sur les tables:test_users
ettest_hosts
, ne sont pas nécessaires puisque vous fournir des valeurs sur chaque requête en cours d'exécution sur les deux tableaux.OriginalL'auteur John Woo
Dans
test_users
invitéUserID
est1120
etdans
test_hosts
hid = 30vous devez modifier
:
OriginalL'auteur w770115
dans mon cas, dans le cas où il sert à quelqu'un.
J'ai eu du mal à trouver la solution de ce qui se produit généralement lors d'une clé primaire est également marqué comme unique.
mais dans mon cas c'était seulement marqué les premiers et il n'a pas marqué comme unique, jusqu'à ce que j'ai remarqué que l'option de l'unica a été "ouvert" et j'ai cliqué sur elle, jusqu'alors, je me laisse faire de la relation.
Ensuite pour l'enregistrement ... vérifier que vos clés primaires sont également uniques.
OriginalL'auteur ramiro