【发布时间】:2015-05-09 02:33:24
【问题描述】:
假设有一个包含以下字段的表格:
ID (auto-increment, int, primary)
NAME (varchar 60)
LOC_LAT (float 8,6)
LOC_LONG (float 9,6)
LASTSEEN (timestamp)
我真的很喜欢 timestamp 数据类型,因为它通过将所有内容存储为 UTC 来减轻时区重新计算的负担。但是,每次在表中的任何位置更改任何内容时,它都会更新。我需要的是 LASTSEEN 字段仅在 LOC_LAT 或 LOC_LONG 字段更新为非 NULL 时更新为新的时间戳价值。可能吗?还是我必须求助于日期时间?
这是我尝试过的,但它根本没有做任何事情:
DROP TRIGGER IF EXISTS `trigger_last_seen`;
CREATE DEFINER=`root`@`localhost` TRIGGER `trigger_last_seen`
BEFORE UPDATE ON `distilled` FOR EACH ROW IF (NEW.LOC_LAT != NULL OR NEW.LOC_LONG != NULL)
THEN SET NEW.LASTSEEN = current_timestamp();
END IF
上面的触发器什么都不做——甚至没有错误!
【问题讨论】: