【发布时间】:2016-06-05 07:51:32
【问题描述】:
只有当 is_active 字段的旧值为 0 且更改为 1 时,我才需要将我的 created_on 日期时间字段值更新为 NOW()。
+-----------+---------+-----------+---------------------+---------------------+
| device_id | user_id | is_active | created_on | last_modified_on |
+-----------+---------+-----------+---------------------+---------------------+
| 5 | 5 | 0 | 2016-06-05 03:31:48 | 2016-06-05 03:31:48 |
这是我目前所得到的:
INSERT INTO `device2users`
(`device_id`, `user_id`, `is_active`, `created_on`, `last_modified_on`)
VALUES
(5, 5, 1, NOW(), NOW())
ON DUPLICATE KEY UPDATE
`created_on` = CASE WHEN `is_active` <> 0 THEN VALUES(`created_on`) ELSE NOW() END,
`is_active`=1, `last_modified_on`=NOW();
但它不起作用,created_on 字段的值始终设置为NOW()。
编辑 1:
我想将 created_on 字段的值更新为 NOW() ON DUPLICATE KEY,前提是 is_active 字段的值之前为 0 并且在指定查询中为 1。
编辑 2:
我根据@ring Bearer 的回答使用以下查询。但我明白了:
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '== '0' && NEW.is_active == '1' THEN
这是我正在使用的确切查询。
DELIMITER //
CREATE TRIGGER created_on_after_update
AFTER UPDATE
ON `acd_device2users` FOR EACH ROW
BEGIN
IF OLD.is_active == '0' && NEW.is_active == '1' THEN
SET `created_on`=NOW();
END IF;
END; //
DELIMITER ;
【问题讨论】:
-
你到底想达到什么目的?您提供的数据不符合此条件。
-
created_on的值将根据您编写的代码设置为NOW()。当您的语句执行时,is_active的值为 0。在您的案例陈述中,您是说当is_active为0 时,created_on应更新为NOw()。
标签: mysql conditional on-duplicate-key