Mon déclencheur MySQL après INSERT ne fonctionne pas? Pourquoi?
Question
J'ai créé un déclencheur semblable au suivant:
delimiter //
CREATE TRIGGER update_total_seconds_on_phone AFTER INSERT
ON cdr
FOR EACH ROW
BEGIN
IF NEW.billsec > 0 AND NEW.userfield <> NULL THEN
UPDATE foo
SET total_seconds = total_seconds + NEW.billsec
WHERE phone_id = NEW.userfield;
END IF;
END;//
Cela semble aller bien. Cependant, cela ne semble pas invoquer quand j'en ai besoin. Voici un exemple:
mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
| 0 |
+---------------+
1 row in set (0.00 sec)
mysql > insérer dans cdr (billsec, userfield) VALUES (60, 1); Requête OK, 1 ligne affectée, 12 avertissements (0,00 s)
mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
| 0 |
+---------------+
EDIT: Les avertissements dans ce cas particulier n’affectent pas le déclencheur. Ce sont principalement les colonnes supplémentaires qui n'ont pas de valeurs par défaut dans la table cdr qui provoquent les avertissements. Dans un souci de simplicité, j’ai gardé le brief de ma déclaration INSERT.
La solution
Il y a 12 avertissements générés. Que sont-ils?
ETA: Oh, attendez ... vous devez utiliser is not null
plutôt que <> null
. Toute comparaison avec null
renverra toujours <=>.