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。参考: