我正在使用 mysql 在一个表中有两列,一列是date_added
,另一列是date_updated
,是否可以在不更改列的情况下记录输入数据date_added
的日期和更新的日期。date_updated
date_added
问问题
190 次
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 回答