繁体   English   中英

创建Mysql日期(更新记录时不更新)

[英]Mysql date created (not to update when record updated)

我正在做一个mysql表,我有一个列在更新时有当前时间戳。 这很好,因为我可以确切地看到有人上传某些内容。 但我不希望列在编辑上传时更改。 是否最好坚持使用一个名为“创建日期”的列,并在更新时使用NO,或者使用“创建日期和修改日期”这两列: - 如果这样,列属性和PHP更新语句的最佳实践是什么?

我通常喜欢单独的“CreateDate”和“LastModifiedDate”。

至于设置它,如果你可以将CreateDate列的默认值设置为NOW()会很好,但MySQL不允许这样做

因此,最简单的选择是使用插入触发器来执行此操作:

CREATE TRIGGER tbl_insert BEFORE INSERT ON `tbl`
    FOR EACH ROW SET NEW.CreateDate = NOW(), NEW.LastModifiedDate = NOW();

ETA:

您也可以使用TIMESTAMP字段,其默认值为CURRENT_TIMESTAMP ,而ON UPDATE CURRENT_TIMESTAMP约束也适用于LastModifiedDate。 遗憾的是,您不能在同一个表上有两个这样的TIMESTAMP列,因此触发器是处理CreateDate列所必需的。

那么它取决于你如何使用数据值,但是大多数情况下将created_atupdated_at都作为表的属性是一个好习惯。 我发现这两个属性都有助于测试和调试。

就像额外信息一样,记住date(); PHP中的函数。

除此之外,我肯定有一个上次修改日期,默认情况下设置为创建日期。

这不是一个真正的答案,因为我认为没有最佳实践,但这是一个我长期思考的问题。

在知道表将用于什么之前,我曾经创建了3个字段:创建日期,修改日期和用户,这将告诉我何时创建行以及谁,然后何时修改此行以及由谁修改。 ..嗯,不,我只有一个用户字段。 那么我要做一个修饰符和一个创建者字段吗? 然后用户更改文章中的所有内容,而另一个用户更正了错误拼写...谁改变了什么?

最后,我想了解数据库输入的历史,但是遵循这个非常糟糕的逻辑(创建,修改日期,用户),我一无所知。 我知道你没有提到用户,但问题仍然是修改。 什么时候被删除? 你不会知道的。

但是让我说对了,我不会把石头丢给任何人:我的大多数桌子仍然是这样设计的。 不过现在是改变的时候了,我打算创建一个历史表,但我还不确定它的结构。

因此,如果你不介意,在对你的问题发表意见的同时,我想建议我的两个计划到目前为止 - 彼此之间并没有太大的不同 - 看看人们对此有何看法。 如果我污染了你的帖子,我会再次感到抱歉,但我只是抓住机会:-p

历史表#1:

表RowID操作日期用户

文件465 Creation 2010-09-25 12:15:19 25
文件465修改2010-09-25 18:03:38 12
文件465修改2010-12-28 14:15:30 25
文件465删除2011-01-25 14:55:31 33

在那种情况下,我想知道是否会使用一个唯一的ID,因为我不明白为什么我会寻找一个特定的行。 这将始终是特定表的特定行的历史记录。

历史表#2:

表RowID历史记录

文件465 {[{action:“creation”,date:“2010-09-25 12:15:19”,user:25},
{action:“modification”,date:“2010-09-25 18:03:38”,user:12},
{action:“modification”,date:“2010-12-28 14:15:30”,user:25},
{action:“删除”,日期:“2011-01-25 14:55:31”,用户:33}]}

这一行将通过JSON对象(或序列化数组)向我们显示一个表行的整个历史记录。 所以我不会怀疑主键:table和rowId肯定会完成这项工作。 即使我更喜欢这个,第一个结构优于这个结构的优点是你可以在一个时间范围内搜索事件,而这在这里是不可能的。

下一步将决定是否向这些结构添加文本字段以保留DIFF以便能够恢复以前的版本。 但这是另一个故事。

我知道DateAdded和DateCreated可能是某些情况下的最佳解决方案,但如果目标是了解数据库条目的历史记录,我认为专用历史表是最佳选择。

这就是我所拥有的,它似乎正在起作用:

名称类型属性默认

创建时间戳CURRENT_TIMESTAMP
更新CURRENT_TIMESTAMP CURRENT_TIMESTAMP时修改的时间戳

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM