代码之家  ›  专栏  ›  技术社区  ›  stack

如何确定更新的列?

  •  0
  • stack  · 技术社区  · 8 年前

    我有这些桌子:

    // 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 表::

    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 列更新。(不是在以下情况下 name postalcode email 更新)。如何定义该条件?

    1 回复  |  直到 8 年前
        1
  •  2
  •   spencer7593    8 年前

    在触发器中,我们可以使用 old new 引用列的值、更新之前的值以及要分配的新值。

    例子:

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

    这个 <=> (宇宙飞船操作符)是NULL安全比较,即使比较NULL值也会返回TRUE或FALSE。