如何确定哪些列更新?
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
列更新时执行该触发器。 (不是在 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;
<=>
(宇宙飞船运算符)是 NULL 安全比较,即使比较 NULL 值,它 returns TRUE 或 FALSE。
我有这些 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
列更新时执行该触发器。 (不是在 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;
<=>
(宇宙飞船运算符)是 NULL 安全比较,即使比较 NULL 值,它 returns TRUE 或 FALSE。