Donc, je reçois:MySql "ne peut pas mettre à jour la ligne parent" quand j'ai "ON UPDATE CASCADE"
Code d'erreur: 1451. Impossible de supprimer ou mettre à jour une ligne parent: une clé étrangère contrainte échoue (
playground
.Person
, CONTRAINTEsk_Person_Parent
FOREIGN KEY (parent_id
) RÉFÉRENCESPerson
(id
) ON SUPPRIMER CASCADE ON UPDATE CASCADE)
C'est la table simple, re se classer:
CREATE TABLE IF NOT EXISTS Person (
id int not null primary key,
name varchar(100) not null,
parent_id int null,
CONSTRAINT `sk_Person_Parent`
FOREIGN KEY (parent_id)
REFERENCES Person (id)
ON DELETE CASCADE
ON UPDATE CASCADE
);
comme vous le voyez, il y a "ON UPDATE CASCADE". I insérer 4 lignes simples qu'elle contient:
INSERT INTO Person(id, name, parent_id)
VALUES
(1, 'vasko', NULL),
(2, 'asdas', 1),
(3, 'ivo', 1),
(4, 'anton', 3);
donc j'ai 1 - vasko 2 - asdasd 3 - ivo 4 - Anton. Lorsque je supprime par l'ID 1, tous les enregistrements sont effacés, à cause de l'ON DELETE CASCADE. Cependant, si j'essaie d'exécuter
UPDATE Person
SET id=10
WHERE id=1;
Je reçois l'erreur donnée. Des idées?
(j'attends id Vasil pour devenir 10, et la parent_id des 2 prochaines lignes à jour à 10)
Il est une approche intéressante clé étrangère. Le problème est le suivant: lorsque vous essayez de changer l'identifiant, ce qui n'est pas habituel, mais disons que c'est bien, il essaie ** ** d'abord de changer la clé étrangère - puisque id = 10 n'existe pas encore, il échoue. Simplement je ne vois aucune solution de contournement pour le résoudre facilement et curieux de voir s'il y en a (autre que l'utilisation de la table temporaire approche peut-être). – smozgur
Eh bien, je lisais un livre de db et il y avait un sujet sur les hiérarchies, alors je voulais expérimenter et ensuite cela m'est venu à l'esprit. Pas un problème qui est critique pour mon travail sur un projet, je me demandais juste. –
SUR MISE À JOUR CASCADE semble être inutile dans cette structure. Je devrais le gérer manuellement pour les enregistrements effectués. Comme je l'ai dit, je suis vraiment curieux de voir s'il y a une solution de contournement. – smozgur