2014-10-04 58 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