我需要在所有表格中有三列,以根据要求反映这些:
此外,我需要保持相同的细节,但在表级 - >
- 创建日期/时间表
- 插入最后一行的日期/时间
- 上次编辑发生的日期/时间。
所以有两个问题:
1)对于3行日期/时间的情况:哪一个需要是日期时间,哪一个是时间戳?
2)对于3个表级日期/时间:我可以以某种方式将其存储在同一个表中,还是需要一个单独的表来存储此信息,以及我可以使用哪些功能?
最终目标是自动化这些日期/时间,因为最终用户将从前端输入/编辑大量数据,例如查找表,因此我需要DB在后面自己完成所有日期/时间没有任何手动插入这些colunms。
此外,我需要对这些日期/时间进行报告,因此需要确保可以在代码级别操作它们,以将日期/时间分解为天,周,月,年,小时和时间。分钟。
答案 0 :(得分:1)
我害怕,这是不可能的。这是一个非常愚蠢的缺点,但in the docs它说:
对于表中的一个TIMESTAMP列, 您可以分配当前时间戳 作为默认值和 自动更新值。有可能 将当前时间戳设为 初始化的默认值 列,用于自动更新值,或 都。这是不可能的 当前时间戳是默认值 一列和自动更新 另一列的价值。
表级时间戳和报告可以使用MAX()
和GROUP BY
直接完成。
答案 1 :(得分:0)
如果要完全使用SQL执行此操作,而不是计算应用程序代码中的更新时间戳,则必须添加另一个表。您的主表只有一个时间戳字段 - 创建日期,默认为CURRENT_TIMESTAMP且永远不会更改。你的第二个表main_updates将是这样的:
CREATE TABLE main_updates(
main_id INT UNSIGNED NOT NULL REFERENCES main(main_id),
update_type ENUM('partial','complete'),
update_time TIMESTAMP DEFAULT CURRENT TIMESTAMP)
然后你有一个选择。如果您想要记录所有已完成的更新,请不要设置主键,只能INSERT到此表中。如果您只想记录最新值,请将主键设置为main_id和update_type,并将update_time设置为ON UPDATE CURRENT_TIMESTAMP
。
然后,只要更新main,就可以编写触发器。
但实际上,让应用层设置更新时间要容易得多。