2010-09-09 169 views
0

前段時間我對此提出了一個問題,但是我仍然有一個問題。我有一個銷售表的mysql5數據庫,其中包含一個代表銷售的時間戳。如果銷售表中的某個字段修改或更改了時間戳,則更新爲當前時間(更改時間)。爲了防止這種情況,我已經取消選擇on_update_select_current_timestamp選項,但時間戳仍然會更改?當修改記錄時,mysql時間戳更新

這裏的場看起來如何在phpMyAdmin

alt text

沒有人有任何想法,我應該做的,取消選中CURRENT_TIMESTAMP的選擇似乎重置on_update_select_current_timestamp觸發

+0

我知道這是很久以前問過的,但我的解決方案是將默認值設置爲空,並且沒有使用current_timestamp更新它。這樣,它沒有更新,並沒有影響我以前的數據。在phpmyadmin(4.2.11)中,您可以通過選中null複選框來完成此操作。 – GreeKatrina 2015-02-19 20:13:01

回答

0

如果你不想此字段將自動更新,只是根本不使用時間戳類型字段
改爲使用datetime。

+0

在這裏一個愚蠢的問題的位,但...我的數據庫有成千上萬的記錄,如果我更改數據庫表,以便時間戳字段是一個日期時間它會搞砸我的網站,例如我的SQL插入將無法正常工作,銷售時間將不會正確格式化? – 2010-09-09 07:02:12

+0

@Mike是的,這是一個愚蠢的問題。你也必須改變你的代碼。我的回答不是關於你的遺留代碼,以及如何處理愚蠢的設計缺陷。但關於數據庫設計,如何正確使用你的工具。遺留代碼的後果是另一回事。雖然代碼重寫沒有什麼不好的地方。它被稱爲重構,它是你工作的一部分。 – 2010-09-09 07:15:35

+0

但是你很幸運,因爲在mysql5時間戳中有與datetime相同的格式,afaik – 2010-09-09 07:16:58

0

檢查表定義,如果CURRENT-TIMESTAMP選項真的被禁用。

如果其禁用,它應該看起來像......

CREATE TABLE `sometable` (
    ...somefields... 
    `Sale_Time` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00' INT(11) DEFAULT NULL, 
    ...somefields... 
) ENGINE=someengine 

...否則CURRENT-TIMESTAMP將在此行中可見。禁用時,它不更新更新,除非某些其他數據庫函數(觸發器等)在更新字段時更改它。