0
假设有具有以下字段的表:更新时间戳
ID (auto-increment, int, primary)
NAME (varchar 60)
LOC_LAT (float 8,6)
LOC_LONG (float 9,6)
LASTSEEN (timestamp)
我真的很喜欢时间戳数据类型,因为它采取的时区重新计算有点过我的肩膀通过将所有内容存储为UTC。但是,每当表中任何地方发生更改时,它都会进行更新。我需要的仅仅是当LOC_LAT或LOC_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
上述触发什么也不做 - 甚至不是一个错误!
试图IS NOT NULL,但引发此错误:'MySQL表示:#1064 - 你在你的SQL语法错误;检查与您的MySQL服务器版本相对应的手册,以便在'NULL或NEW.LONGITUDE不为NULL'附近使用正确的语法。'然后更新'在第1行蒸馏'contacts'设置网元' – TheLearner
您有空两次,这是一个问题。你也许需要在每个非空语句周围添加括号,但我不认为这会是这种情况 – holtc
这是我尝试的:IF((NEW.LATITUDE不是NULL NULL)或(NEW.LONGITUDE IS NOT NULL NULL)) then UPDATE'distilled_contacts' SET NEW.LASTSEEN = now(); END IF – TheLearner