Désolé de poser à nouveau cette question car il y a beaucoup de choses sur le forum à ce sujet. Mais j'espère que mon problème est différent des autres. Désolé pour mon mauvais anglais.
J'ai d'abord 2 tables (table parent et table enfant) Parent (lieu)
loc_id | loc_size |
---|---|
1 | 100 |
2 | 75 |
Enfants (Zone)
ar_id | ar_loc_id | ar_size |
---|---|---|
1 | 2 | 35 |
2 | 2 | 40 |
C'est mon déclencheur post-suppression.
CREATE TRIGGER after_delete_area_location AFTER DELETE ON area FOR EACH ROW BEGIN UPDATE location SET loc_size = loc_size + old.ar_size WHERE loc_id=old.ar_loc_id END;
Par exemple, si je souhaite supprimer ar_id = '2', alors ar_size sera mis à jour en position loc_size.
Puisque la valeur loc_size est "0", la valeur sera de 40 après l'exécution du déclencheur.
Le problème est que le déclencheur ne fonctionne pas correctement, une fois le déclencheur exécuté, loc_size n'est pas du tout mis à jour, juste la valeur "0".
Est-ce que j'ai raté quelque chose ou quelque chose se passe parce que cela ne fonctionne tout simplement pas.
S'il vous plaît, aidez-moi à résoudre ce problème. Merci beaucoup.
Je ne vois rien de mal à votre déclencheur. Je l'ai testé et ça marche. Pour le rendre complet, j'ai ajouté un déclencheur d'insertion sur la table
区域
.Comme vous pouvez le voir, dans les opérations d'insertion et de suppression, les valeurs sont mises à jour en conséquence.
-- Mise à jour à partir d'ici --
Il s'agit de l'instruction déclencheur
after_insert_area_location
的增强版本,我将在其中演示新添加的 IF 语句以保持数据完整性。请注意,SIGNAL
utilisée pour générer une erreur qui agit comme un message d'avertissement et met fin à l'opération.Comme vous pouvez le voir, les déclencheurs
IF
语句中的SIGNAL
语句引发了一个错误,其中包含 SQL_STATE 代码77777
et le message : sont prédéfinis. Cela annulera les modifications apportées depuis l'insertion de la nouvelle ligne.En bref, nous pouvons utiliser des instructions IF dans les déclencheurs pour avoir un certain contrôle sur le flux de données. L'instruction SIGNAL peut être utilisée pour invoquer intentionnellement une erreur pour arrêter/annuler l'exécution d'un déclencheur et démarrer l'action d'un déclencheur. Comme mentionné ci-dessus, non seulement les instructions
UPDATE
没有执行,引发触发器的insert
du déclencheur sont également annulées.