Mysql 如何确定哪些列更新?

Mysql 如何确定哪些列更新?,mysql,sql,sql-update,sql-insert,Mysql,Sql,Sql Update,Sql Insert,我有这些桌子: // users +----+--------+--------------+------------+---------------------------+ | id | name | phone | postalcode | email | +----+--------+--------------+------------+---------------------------+ | 1 | john | 0

我有这些桌子:

// 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 |
+----+---------+---------------+------------+
用户
表更新后,我也有这个触发器:

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
更新)。我如何定义该条件

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

例如:

  IF NOT ( new.phone <=> old.phone ) THEN
    -- value assigned to phone column changed
  ELSE
    -- value of phone column unchanged
  END IF;  
如果没有(new.phone old.phone),则
--指定给电话列的值已更改
其他的
--phone列的值保持不变
如果结束;

(spaceship操作符)是空安全比较,即使比较空值,也会返回TRUE或FALSE

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

例如:

  IF NOT ( new.phone <=> old.phone ) THEN
    -- value assigned to phone column changed
  ELSE
    -- value of phone column unchanged
  END IF;  
如果没有(new.phone old.phone),则
--指定给电话列的值已更改
其他的
--phone列的值保持不变
如果结束;
(spaceship操作符)是空安全比较,即使比较空值,也会返回TRUE或FALSE

一个小问题,
意味着不平等。那么那是什么
而不是
?我想你必须说:如果
phone
列的old和first值不相等,那么“phone changed”。所以我相信你必须删除
而不是
@stack:
意味着。。。“空安全相等。此运算符执行与=运算符类似的相等比较,但如果两个操作数都为空,则返回1而不是NULL,如果一个操作数为空,则返回0而不是NULL。”参考:一个小问题,
表示不相等。那么那是什么
而不是
?我想你必须说:如果
phone
列的old和first值不相等,那么“phone changed”。所以我相信你必须删除
而不是
@stack:
意味着。。。空安全相等。此运算符执行与=运算符类似的相等比较,但如果两个操作数都为空,则返回1而不是NULL;如果一个操作数为空,则返回0而不是NULL。参考: