mysql日期和时间列

时间:2012-08-03 15:40:28

标签: mysql sql

我正在使用mysql在表中有两列,一列是date_added,另一列是date_updated,是否可以将输入数据的日期记录在{{ 1}}及其更新日期在date_added中重新发送,而不更改date_updated列。

2 个答案:

答案 0 :(得分: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值。

答案 1 :(得分:0)

当然。只需在查询中使用正确的列名称即可。在执行INSERT时会填充date_added字段。执行UPDATE时,只需更新date_updated字段即可。除非您在查询中明确地执行此操作或使用触发器,否则另一个不会受到影响。但这显然在你的掌控之中。