108 votes

Violation de contrainte d'intégrité : 1452 Impossible d'ajouter ou de mettre à jour une ligne enfant :

Je tente d'insérer des valeurs dans ma table de commentaires et je reçois une erreur. Il dit que je ne peux pas ajouter ou mettre à jour une ligne enfant et je n'ai aucune idée de ce que cela signifie.

Mon schéma ressemble à ceci

-- ----------------------------
-- Structure de la table `comments`
-- ----------------------------
DROP TABLE IF EXISTS `comments`;
CREATE TABLE `comments` (
  `id` varchar(36) NOT NULL,
  `project_id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `task_id` varchar(36) NOT NULL,
  `data_type_id` varchar(36) NOT NULL,
  `data_path` varchar(255) DEFAULT NULL,
  `message` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_comments_users` (`user_id`),
  KEY `fk_comments_projects1` (`project_id`),
  KEY `fk_comments_data_types1` (`data_type_id`),
  CONSTRAINT `fk_comments_data_types1` FOREIGN KEY (`data_type_id`) REFERENCES `data_types` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_projects1` FOREIGN KEY (`project_id`) REFERENCES `projects` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION,
  CONSTRAINT `fk_comments_users` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Enregistrements des commentaires
-- ----------------------------

-- ----------------------------
-- Structure de la table `projects`
-- ----------------------------
DROP TABLE IF EXISTS `projects`;
CREATE TABLE `projects` (
  `id` varchar(36) NOT NULL,
  `user_id` varchar(36) NOT NULL,
  `title` varchar(45) DEFAULT NULL,
  `description` longtext,
  `created` datetime DEFAULT NULL,
  `modified` datetime DEFAULT NULL,
  PRIMARY KEY (`id`),
  KEY `fk_projects_users1` (`user_id`),
  CONSTRAINT `fk_projects_users1` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE NO ACTION ON UPDATE NO ACTION
) ENGINE=InnoDB DEFAULT CHARSET=utf32;

-- ----------------------------
-- Enregistrements des projets
-- ----------------------------
INSERT INTO `projects` VALUES ('50dcbc72-3410-4596-8b71-0e80ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', 'Nouveau projet de marque', 'C'est un tout nouveau projet', '2012-12-27 15:24:02', '2012-12-27 15:24:02');

et la déclaration mysql que j'essaie de faire ressemble à ceci

INSERT INTO `anthonyl_fbpj`.`comments` (`project_id`, `user_id`, `task_id`, `data_type_id`, `message`, `modified`, `created`, `id`) 
VALUES ('50dc845a-83e4-4db3-8705-5432ae7aaee3', '50dcbc5c-d684-40bf-9715-0becae7aaee3', '1', '50d32e5c-abdc-491a-a0ef-25d84e9f49a8', 'c'est un test', '2012-12-27 19:20:46', '2012-12-27 19:20:46', '50dcf3ee-8bf4-4685-aa45-4eb4ae7aaee3')

l'erreur que je reçois ressemble à ceci

SQLSTATE[23000]: Violation de contrainte d'intégrité : 1452 Impossible d'ajouter ou mettre à jour une ligne enfant : une contrainte de clé étrangère échoue (anthonyl_fbpj.comments, CONTRAINTE fk_comments_projects1 CLÉ ÉTRANGÈRE (project_id) REFERENCES projects (id) ON DELETE NO ACTION ON UPDATE NO ACTION)

0voto

Lenor Points 1194

J'avais une table remplie de certaines entrées qui avaient des clés étrangères mortes. une fois que j'ai nettoyé la table, j'ai pu ajouter une nouvelle contrainte.

DELETE FROM `table_with_bad_entries` WHERE `expected_foreign_key` not in (select `id` from `the_referenced_table`);

-1voto

MUHAMMAD USMAN Points 1

Je viens d'exporter la table supprimée et de l'importer à nouveau et cela a fonctionné pour moi. Cela s'explique par le fait que j'ai supprimé la table parent(users) puis l'ai recréée et la table enfant(likes) a la clé étrangère de la table parent(users).

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X