如何确定哪些列更新?

How to determine which column updates?

我有这些 table:

// users
+----+--------+--------------+------------+---------------------------+
| id |  name  |    phone     | postalcode |           email           |
+----+--------+--------------+------------+---------------------------+
| 1  | john   | 0338294214   | 65462345   | fer.74@gmail.com          |
| 2  | jack   | 0657359930   | 93827424   | jack_m@yahoo.com          |
| 3  | peter  | 0083247242   | 99849422   | mv2003@hotmail.com        |
+----+--------+--------------+------------+---------------------------+

// notifications
+----+---------+---------------+------------+
| id | user_id |    content    | timestamp  |
+----+---------+---------------+------------+
| 1  | 2       | phone updated | 1452642595 |
+----+---------+---------------+------------+

我在 users table::

更新后 也有这个触发器
DELIMITER //
CREATE TRIGGER `send_notification` AFTER UPDATE ON `users`
FOR EACH ROW BEGIN
  INSERT INTO notification(user_id, content, timestamp)
                    values(new.id, "phone updated", UNIX_TIMESTAMP())
END
//
DELIMITER 

我要做的就是在 phone 列更新时执行该触发器。 (不是在 namepostalcodeemail 更新时)。我如何定义该条件?

在触发器中,我们可以使用oldnew来引用列的值、更新前的值和要分配的新值。

示例:

  IF NOT ( new.phone <=> old.phone ) THEN
    -- value assigned to phone column changed
  ELSE
    -- value of phone column unchanged
  END IF;  

<=>(宇宙飞船运算符)是 NULL 安全比较,即使比较 NULL 值,它 returns TRUE 或 FALSE。