簡體   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