2014-10-04 98 views
0

我想詢問有關更新表格中的年齡列的信息。是否可以根據我的表格中的出生日期列每年自動更新年齡。年齡欄和出生日期欄位於同一個表格中。但是,如果這是不可能的,也許我只是每次選擇年齡欄並從出生日期欄計算年齡時更新年齡表。我只是有點好奇,如果有一個即時的方式來做到這一點。每年自動增加或更新年齡列mysql

+6

請勿使用年齡欄;記錄出生日期,並基於此計算年齡。 – 2014-10-04 01:45:43

+0

您可以使用事件調度程序定期更新年齡列。 – Barmar 2014-10-04 01:46:41

+0

@JonathanLeffler是的,我也是這麼想的。但我有點好奇,有沒有辦法做到這一點。如果這是不可能的,也許我只是刪除年齡列 – 2014-10-04 01:48:47

回答

3

不要存儲「年齡」。如果您有DOB列,那麼「年齡」僅僅是當前日期和時間與DOB之間的差異。如果您希望根據特定日期計算「年齡」,那麼它仍然是該日期和DOB之間的差異。

您可以使用MySQL內置TIMESTAMPDIFF函數來計算「時代」多年來,例如:在你的出生日期欄

SELECT TIMESTAMPDIFF(YEAR, '1993-10-01' ,NOW()) AS age_in_whole_years 

替補多爲在表達字面。只要您運行包含此表達式的語句,就會自動計算該值。你不能得到更多的「自動」比。

如果您需要根據年齡進行「搜索」,請改爲在DOB列上使用謂詞。要找到「年齡」小於21的行,那麼DOB不到21年前,也就是說,DOB大於今天的日期減去21年。例如

WHERE t.dob > NOW() - INTERVAL 21 YEARS 

要回答你問的問題:

沒有,有沒有在MySQL的是將「自動增加或更新」存儲在「年齡」列中的值。 (要更改存儲在列中的值,您需要運行UPDATE語句。)可以將計劃任務設置爲定期運行,但該任務需要發出UPDATE語句。如果你願意,你可以稱之爲「自動」。他們已經知道存儲的「年齡」列的「自動遞增」是一個壞主意,而且已經有了更好的解決方案。)

我非常肯定,StackOverflow不存儲問題和答案的「年齡」,「1小時前問」,或發佈「4個月前」。讓他們翻閱桌面,爲每個問題,每個評論,每個答案......更新一行,這將是瘋狂的。他們真正需要的是存儲日期和時間的東西發佈,他們設置它,並忘記它...沒有攪動更新語句,獲得排他鎖,生成撤銷/回滾,寫入重做日誌,這隻會錘擊數據庫。對於檢索,他們已經在做所有的工作來運行SQL來檢索行,發佈的日期時間在那裏,他們只是檢索它,並且它對於「年齡」計算的處理量是微不足道的。

+0

啊,你的例子真的讓我大開眼界大聲笑 – 2014-10-04 05:47:29