我创建了一个类似于以下内容的触发器:
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;//
好像顺利通过了。但是,当我需要它时,它似乎并没有被调用。这是一个例子:
mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
| 0 |
+---------------+
1 row in set (0.00 sec)
mysql> 插入 cdr (billsec, userfield) VALUES(60, 1); 查询正常,1 行受影响,12 个警告(0.00 秒)
mysql> select total_seconds from foo where phone_id = 1;
+---------------+
| total_seconds |
+---------------+
| 0 |
+---------------+
编辑:这种特殊情况下的警告不会影响触发器。导致警告的主要是 cdr 表中没有默认值的附加列。为了简单起见,我将我的 INSERT 语句保持简短。