2009-09-30 75 views

回答

1

您可以用觸發器做:

DELIMITER $$ 
CREATE TRIGGER `before_update` BEFORE UPDATE ON `table_name` FOR EACH ROW BEGIN 
SET NEW.update_date = NOW(); 
END; 
$$ 

CREATE TRIGGER `before_insert` BEFORE INSERT ON `table_name` FOR EACH ROW BEGIN 
SET NEW.update_date = NOW(); 
END; 
$$ 

DELIMITER ; 
8

你可以時間戳來代替,並設置ON UPDATE CURRENT_TIMESTAMP NOT NULL,例如:

CREATE TABLE example (
lastUpdate TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
); 
+0

差不多,看我的其他答案。 – ripper234 2009-09-30 15:35:41

+0

我已經做了,並投票給你。我也試着留下'Well spotted'的評論,但是它沒有超過所需的最少15個字符。 – Anax 2009-09-30 15:58:20

+0

我討厭15個字符的規則。 – ripper234 2009-09-30 15:59:48

2

像ANAX表示,採用TIMESTAMP代替DATETIME會給你一個使用當前時間的列,而不是等待提供的日期/時間。

你有很多的options with TIMESTAMP,這兩個是最重要的有:

  • 有使用它時,該行創建當前時間(NOW()
  • 有修改它的列中當前行的修改時間。

如果不設置任何選項,就像這樣:

CREATE TABLE stuff (ts TIMESTAMP); 

它將把在當前時間創建和變化上修改該列。

所以,如果你想有一個列在創建時,只顯示,你可以使用:

CREATE TABLE stuff (ts TIMESTAMP DEFAULT CURRENT_TIMESTAMP); 

既然你沒有指定ON UPDATE條款,如果該行被更新,它不會做任何事情。

如果你是瘋了,像我一樣,你會希望同時,與去:

CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
        mod_date TIMESTAMP 
        ); 

,因爲我還沒有寫這一點,然而,這最後一個是相當於寫出:

CREATE TABLE stuff (create_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP, 
        mod_date TIMESTAMP DEFAULT CURRENT_TIMESTAMP 
             ON UPDATE CURRENT_TIMESTAMP 
        ); 
+0

第二個最後的聲明真的幫助我。非常感謝你。 – twnaing 2013-01-18 19:16:10

4

Anax已經接近,但錯過了默認值。

CREATE TABLE example (
lastUpdate TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL 
) 
相關問題