web-dev-qa-db-fra.com

Déclencheur MySQL: Supprimer du tableau après suppression

Portée: deux tables. Lorsqu'un nouveau client est créé, certaines informations à son sujet sont stockées dans une deuxième table (ceci a également été utilisé à l'aide d'un déclencheur, qui fonctionne normalement). Voici un exemple de ma structure de table et de ma relation.

Tableau 1-> Patrons

+-----+---------+-----+
+  id +   name  + val +
+=====+=========+=====+
+  37 +  george +  x  +
+-----+---------+-----+
+  38 +  sally  +  y  +
+-----+---------+-----+

Tableau 2 -> patron_info

+----+-----+----------+
+ id + pid +   name   +
+----+-----+----------+
+  1 +  37 +  george  +
+----+-----+----------+
+  2 +  38 +  sally   +
+----+-----+----------+

L'administrateur peut gérer les clients. Lorsqu'ils choisissent de supprimer un utilisateur, celui-ci est supprimé de la table table 1 patrons. À ce stade, rien ne se passe dans table 2 patron_info

J'essaie simplement de créer un déclencheur à supprimer de la table 2, lorsqu'un élément est supprimé de la table 1. Voici ce que j'ai essayé ...

Au départ, j'essaie de laisser tomber la gâchette si elle existe (juste pour purifier l'air) ...

DROP TRIGGER IF EXISTS log_patron_delete;

Ensuite, j'essaie de créer le déclencheur par la suite ...

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = patrons.id
END

À ce stade, j'obtiens une erreur de syntaxe 1046: Check syntax near END on line 6. Je ne sais pas quelle est l'erreur à ce stade. J'ai essayé plusieurs variantes. De plus, suis-je obligé d'utiliser un délimiteur ici?

Quelqu'un peut-il aider à restaurer ma santé mentale?

18
Ohgodwhy

Je pense qu'il y a une erreur dans le code de déclenchement . Comme vous voulez supprimer toutes les lignes avec l'ID utilisateur supprimé, vous devez utiliser old.id (sinon, cela effacerait d'autres ID)

Essayez ceci comme nouveau déclencheur:

CREATE TRIGGER log_patron_delete AFTER DELETE on patrons
FOR EACH ROW
BEGIN
DELETE FROM patron_info
    WHERE patron_info.pid = old.id;
END

N'oubliez pas le ";" sur la requête de suppression . De même, si vous entrez le code TRIGGER dans la fenêtre de la console, utilisez également les délimiteurs.

38
vivek_jonam

Pourquoi ne pas définir ON CASCADE DELETE sur la clé étrangère patron_info.pid?

9
Andrew G.
create trigger doct_trigger
after delete on doctor
for each row
delete from patient where patient.PrimaryDoctor_SSN=doctor.SSN ;
0
alireza abedini