行创建和最后修改的时间戳

时间:2011-12-03 00:33:43

标签: mysql sql timestamp mysql-error-1293

我需要跟踪行插入数据库的时间以及上次修改的时间。

我尝试创建两个单独的列,并使用CURRENT_TIMESTAMP

create table def (
  id int, 
  creation timestamp 
    default CURRENT_TIMESTAMP, 
  modification timestamp 
    on update CURRENT_TIMESTAMP
);

然而,这产生了一个错误:

  

错误1293(HY000):表定义不正确;在DEFAULT或ON UPDATE子句中只能有一个TIMESTAMP列和CURRENT_TIMESTAMP

这样做的最佳方式是什么?

我正在考虑存储过程,但正在寻找标准解决方案。我也关注访问权限 - 因为很少有程序/事情应该能够触及时间戳。


虽然我更喜欢MySQL的答案,但其他RDBMS的解​​决方案也很受欢迎!

2 个答案:

答案 0 :(得分:3)

雅这是对MySQL的蹩脚限制。如果您要浏览应用程序,可以为created_at列添加time()调用,并让updated_at列使用CURRENT_TIMESTAMP。

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = " . time();

我选择在created_at列上执行此操作,因为它可能不会像updated_at列那样频繁触及。

- 编辑 -

更好的是,使用MySQL内置的now()函数。这样你只需要关心mysql服务器的时区,而不是app服务器和mysql服务器的时区。

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = NOW()";

答案 1 :(得分:2)

您可以使用触发器。应用程序也可以设置值,但如果这样做,它将被数据库覆盖。

delimiter //
CREATE TRIGGER def_bef_update BEFORE UPDATE ON def FOR EACH ROW BEGIN
    SET NEW.modification = CURRENT_TIMESTAMP;
END//
delimiter ;

只有在有重大变化的情况下,您还可以使用它来检查数据并更新修改日期。