2015-04-15 78 views
0

我有這張帶有newspost的表格,我想添加添加日期的時間戳,並且我想在編輯帖子時更新另一個col。我希望它在MySql中自動發生。沒有使用任何PHP代碼。如何自動更新表更新的時間戳?

CREATE TABLE IF NOT EXISTS news (
     id int(11) NOT NULL AUTO_INCREMENT, 
     data text, 
     date_published timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, 
     date_edited timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, 
     PRIMARY KEY (id) 
    ); 

這種情況下的最佳做法是什麼?

+1

http://dev.mysql.com/doc/refman/5.6/en/triggers.html –

+0

可能是http://stackoverflow.com/questions/2045745/mysql-update-的欺騙timestamp-column-trigger – NinjaCat

+0

你有沒有在搜索過類似的問題?實際上有噸。 – Rahul

回答

1

只能在一個表中使用上一個時間戳列的DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP特徵。

使用下表定義來關閉這些功能對於date_published,並將其用於date_edited:

CREATE TABLE IF NOT EXISTS news (
    id INT(11) NOT NULL AUTO_INCREMENT, 
    data TEXT, 
    date_published TIMESTAMP NOT NULL DEFAULT 0, 
    date_edited TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (id) 
); 

當插入新行,傳爲date_published一個NULL值到當前時間戳自動分配給該列。

MySQL的文檔上Automatic Initialization and Updating for TIMESTAMP

它不需要在被 自動初始化或更新爲當前的時間戳表中的第一個TIMESTAMP列。 但是,要指定自動初始化或更新 不同的TIMESTAMP列,必須先禁止第一個自動屬性 。然後,對於另一個TIMESTAMP列, DEFAULT和ON UPDATE子句的規則與第一個 TIMESTAMP列的規則相同,只是如果省略兩個子句,則不會自動初始化或更新 。

爲了抑制對第一時間戳列自動屬性,執行 下列之一:

  • 定義與指定的恆定默認值的DEFAULT子句的列。
  • 指定NULL屬性。這也會導致列允許NULL值,這意味着您無法通過將列設置爲NULL來分配當前時間戳。分配NULL將列設置爲NULL。
3

考慮使用觸發器。 From MySQL docs

觸發器是一個與表關聯的命名數據庫對象,當表發生特定事件時會激活該對象。觸發器的一些用途是執行要插入到表中的值的檢查或對更新中涉及的值執行計算。觸發器的

實施例:

CREATE TRIGGER trigger_example AFTER UPDATE ON news 
FOR EACH ROW UPDATE some_table SET another_column = NEW.data;