设置上次修改和添加日期记录的字段的最佳方法是什么?

时间:2011-06-09 15:35:34

标签: mysql

您好我想设置并忘记两个字段,用于跟踪添加记录的日期以及上次修改记录在mySQL数据库中的日期。

我正在使用“ON UPDATE CURRENT_TIMESTAMP”并希望我只是将UPDATE更改为INSERT。

但是没有运气。任何人都可以给我提供最好的方法来实现这一目标吗? - 最好在数据库内部。

4 个答案:

答案 0 :(得分:11)

这假定MySQL 5.只需添加两个触发器:

create table foo (a1 INT, created timestamp, updated timestamp) engine=innodb;

DELIMITER |

CREATE TRIGGER foo_created BEFORE INSERT ON foo
FOR EACH ROW BEGIN
SET new.created := now();
SET new.updated := now();
END;

|

CREATE TRIGGER foo_updated BEFORE UPDATE ON foo
FOR EACH ROW BEGIN
SET new.updated := now();
END;
|

DELIMITER     ;

insert into foo (a1) values(7);
select * from foo;

update foo set a1=9;

答案 1 :(得分:3)

您基本上需要将两列设置为时间戳,默认值为CURRENT_TIMESTAMP。不幸的是,MySQL中不允许这样做:

Error Code: 1293
Incorrect table definition; there can be only one TIMESTAMP column with CURRENT_TIMESTAMP in DEFAULT or ON UPDATE clause

您不能拥有两个时间戳列,即使您只需要一个默认值为CURRENT_TIMESTAMP,另一个为UPDATE CURRENT_TIMESTAMP,但仍然不允许这样做。

这里最好的选择是指定如下:

CREATE TABLE `test` (
`addedDate` dateTime,
`lastModified` timestamp on update CURRENT_TIMESTAMP
)

不幸的是,您必须使用NOW()函数手动设置'addedDate'。

答案 2 :(得分:0)

mySQL有一个你可以使用的NOW()函数,请参阅Tutorials Point中的教程,它可以帮助你实现它。

答案 3 :(得分:0)

您可以添加DATETIME列并在创建数据行时进行设置。这将作为记录添加的日期。

接下来,添加TIMESTAMP列:

  

在以下任何条件下自动更新表中的第一个TIMESTAMP列:

     
      
  • 您明确将列设置为NULL。

  •   
  • 未在INSERT或LOAD DATA INFILE语句中明确指定该列。

  •   
  • 未在UPDATE语句中显式指定该列,而某些其他列更改值。一个UPDATE,它将列设置为不会导致TIMESTAMP列更新的值;如果将列设置为其当前值,则MySQL会忽略更新以提高效率。

  •   

TIMESTAMP列将处理您的记录修改日期。