2015-05-09 223 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