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. P>
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. P>
merci. p>
3 Réponses :
Je ne l'ai pas testé, mais basé sur la documentation , cela ressemble à peu près à droite:
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.
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 p>
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. p>
quelque chose comme ceci: p>
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 B> 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é.
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