6
votes

Déclencher avant de supprimer mysql

J'ai une table nommée utilisateur. Cette table a une clé étrangère à une table de département. Un utilisateur peut être associé à un département. Avant de supprimer un département, je voudrais définir un utilisateur (avoir cet ID de département) à une valeur par défaut (1) pour éviter une erreur d'intégrité référentielle.

connaissez-vous un bon exemple. La plupart des exemples montre que la gâchette est appliquée à une table. Ici, la gâchette doit être déclenchée sur le département mais modifier les valeurs dans la table des utilisateurs.

merci.


2 commentaires

Le "déclencheur est appliqué à une table" signifie qu'une table est liée à un acte spécifique sur une table spécifique, il ne peut pas être lié (comme dans ce qui le fait fonctionner) à plusieurs tables. Il peut préformer toutes les actions que le créateur de la gâchette a le droit de préformer.


Ce SQL a fonctionné: créez le déclencheur dept_set_user_to_wuk avant de supprimer le département de chaque ligne de mise à jour de l'utilisateur de Dépôt = 1 où septid = old.deptid; où le département est département


3 Réponses :


11
votes

Je ne l'ai pas testé, mais basé sur la documentation , cela ressemble à peu près à droite: xxx


2 commentaires

IGET: Erreur 1064 (42000): Vous avez une erreur dans votre syntaxe SQL; Vérifiez le manuel qui correspond à votre version de votre serveur MySQL pour la syntaxe de droite à utiliser à proximité 'User User Set User.deptid = 1 où user.deptid = old.deptid' à la ligne 1


Vous devrez peut-être changer le délimiteur en quelque chose d'autre que ";" pour créer la gâchette. Sinon, MySQL tente d'analyser la déclaration uniquement au premier point-virgule.



0
votes

Vous pouvez utiliser n'importe quelle instruction SQL dans votre code de déclenchement. Lorsqu'un enregistrement est supprimé, le code de déclenchement est viré. Vous pouvez utiliser l'enregistrement qui a tiré la gâchette (pour sélectionner l'ID de département), puis sélectionnez n'importe quel utilisateur avec cet identifiant et mettre à jour cet enregistrement d'utilisateur. Bonne chance


0 commentaires

3
votes

Dans la plupart des cas, il est préférable de définir la valeur enfant sur NULL lorsque le parent est supprimé, plutôt que d'utiliser une valeur par défaut de 1 comme vous le faites.

Si vous décidez que ce comportement est approprié, vous pouvez faire C'est un attribut de la clé étrangère et ne nécessitera pas de déclencheur du tout.

quelque chose comme ceci: xxx


3 commentaires

Cela a du sens, mais une exigence est que chaque utilisateur doit appartenir à un département ou au moins au département 1, qui est la société. Oui, il serait mieux et plus facile à utiliser Set Null mais je ne peux pas faire cela.


@RTACCONI: Vous pouvez utiliser Définir la valeur par défaut dans la contrainte de clé étrangère


Définir la valeur par défaut dans la contrainte de clé étrangère à un numéro spécifique peut casser la sauvegarde de MySQL lorsque vous restaurez / importer vos données, même si vous désactivez la vérification des contraintes. Je sonne fou mais cela m'est arrivé.