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