1

我正在使用 mysql 在一个表中有两列,一列是date_added,另一列是date_updated,是否可以在不更改列的情况下记录输入数据date_added的日期和更新的日期。date_updateddate_added

4

2 回答 2

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值。

于 2012-08-03T15:48:11.080 回答
0

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

于 2012-08-03T15:43:01.237 回答