2012-08-03 32 views
1

我使用的mysql有兩列在一個表中一個是date_added,另一個是date_updated,是否有可能讓數據輸入的日期記錄在date_added以及它的日期更新記錄在date_updated而不更改date_added列。mysql的日期和時間列

回答

2

在5.6之前,MySQL只支持一個TIMESTAMP字段自動初始化。這可以是「創建」或「更新」列,但不能同時存在。

對於自動初始化 '創造' 欄目中,使用:

CREATE TABLE ... 
date_added TIMESTAMP DEFAULT CURRENT_TIMESTAMP 

對於自動初始化 '更新' 一欄,使用

CREATE TABLE ... 
date_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 

不幸的是,你不能兼得。如果你想同時擁有自動初始化,您將需要使用觸發器:

CREATE TABLE ... 
date_added TIMESTAMP, -- doesn't auto-initialize 
date_updated TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP; 

,然後設置一個TRIGGER更新date_added領域:

DROP TRIGGER IF EXISTS tablename_before_insert; 

DELIMITER // 

CREATE 
DEFINER = CURRENT_USER 
TRIGGER tablename_before_insert 
    BEFORE INSERT ON 
     tablename -- insert your table name here 
    FOR EACH ROW 
BEGIN 
    IF IFNULL(NEW.date_added, 0) <= 0 
    THEN 
     SET NEW.date_added = NOW(); 
    END IF; 
END; 
// 

IF IFNULL(NEW.date_added, 0) <= 0 
如果需要,可以使用

子句來覆蓋值date_added

+0

Ø哇驚人非常感謝,我會嘗試這一點,並使用'CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'的日期date_updated列IM和IM DATE_ADDED讓你知道外面的事情,但是是的,它確實對你所說的事情看起來100%合乎邏輯 – dames 2012-08-03 15:51:53

0

當然。只需在查詢中使用正確的列名即可。在執行INSERT時填充date_added字段。在更新時只需更新date_updated字段。除非您在查詢中或在觸發器中明確這樣做,否則不會受到影響。但這顯然是在你的掌控之中。

+0

那麼,什麼數據類型我會用每一個和默認值,因爲使用相同的,所以他們都改變 – dames 2012-08-03 15:50:01