我正在使用mysql在表中有两列,一列是date_added
,另一列是date_updated
,是否可以将输入数据的日期记录在{{ 1}}及其更新日期在date_added
中重新发送,而不更改date_updated
列。
答案 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
字段即可。除非您在查询中明确地执行此操作或使用触发器,否则另一个不会受到影响。但这显然在你的掌控之中。