每年自动增加或更新age列mysql

时间:2014-10-04 01:43:17

标签: mysql sql

我想询问有关更新表格中年龄列的问题。是否可以根据我表格中的出生日期栏自动更新年龄。年龄列和出生日期列在同一个表中。但是如果不可能的话,也许我只是在每次选择年龄列时更新年龄表,并计算出生日期列的年龄。我只是有点好奇,如果有一个即时的方法来做到这一点。

1 个答案:

答案 0 :(得分:3)

不要存储“年龄”。如果你有一个DOB列,那么“age”就是当前日期和时间与DOB之间的差异。如果你想要在特定日期计算“年龄”,那么它仍然是该日期和DOB之间的差异。

您可以使用MySQL内置TIMESTAMPDIFF函数计算年龄的“年龄”,例如:

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

在DOB列中包含该表达式中的文字。只要您运行包含此表达式的语句,就会自动计算该值。你不能比那更“自动”。

如果您需要根据年龄“搜索”,请改用DOB列上的谓词。要查找“年龄”小于21的行,那么DOB不到21年,也就是说,DOB大于今天的日期减去21年。 e.g。

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

回答您提出的问题:

不,MySQL中没有任何内容可以“自动增加或更新”存储在“age”列中的值。 (要更改存储在列中的值,您需要运行UPDATE语句。)您可以设置定期运行的计划任务,但该任务需要发出UPDATE语句。如果你愿意,你可以称之为“自动”。

(聪明到足以设计数据库软件的人会想到这样的东西;他们已经知道存储的“年龄”专栏的“自动增量”是一个坏主意。已经有了更好的解决方案。)

我很确定StackOverflow不存储问题和答案的“年龄”,“1小时前询问”,或“4个月前”发布。让他们翻阅表格,为每个问题,每个评论,每个答案更新一行......这将是疯狂的。他们真正需要的只是存储发布的日期和时间,他们设置并忘记它...没有更新语句,获得排他锁,生成撤消/回滚,写入重做日志,这只会锤击数据库。为了检索,他们已经完成了运行SQL以检索行的所有工作,发布的日期时间在那里,他们只是检索它,并且它对“年龄”计算的处理量可以忽略不计。