2012-08-03 88 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