2015-05-09 218 views
0

假设有具有以下字段的表:更新时间戳

ID (auto-increment, int, primary) 
NAME (varchar 60) 
LOC_LAT (float 8,6) 
LOC_LONG (float 9,6) 
LASTSEEN (timestamp) 

我真的很喜欢时间戳数据类型,因为它采取的时区重新计算有点过我的肩膀通过将所有内容存储为UTC。但是,每当表中任何地方发生更改时,它都会进行更新。我需要的仅仅是当LOC_LATLOC_LONG字段用非空值更新时,只需要用新的时间戳更新LASTSEEN字段。可能吗?或者我必须诉诸日期?

这里是我试过,但它并没有在所有做任何事情:

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 

上述触发什么也不做 - 甚至不是一个错误!

回答

1

使用IS NOT NULL而不是!=

+0

试图IS NOT NULL,但引发此错误:'MySQL表示:#1064 - 你在你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'NULL或NEW.LONGITUDE不为NULL'附近使用正确的语法。'然后更新'在第1行蒸馏'contacts'设置网元' – TheLearner

+0

您有空两次,这是一个问题。你也许需要在每个非空语句周围添加括号,但我不认为这会是这种情况 – holtc

+0

这是我尝试的:IF((NEW.LATITUDE不是NULL NULL)或(NEW.LONGITUDE IS NOT NULL NULL)) then UPDATE'distilled_contacts' SET NEW.LASTSEEN = now(); END IF – TheLearner