7

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

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

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

但是,这产生了一个错误:

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

做这个的最好方式是什么?

我正在考虑存储过程,但正在寻找标准解决方案。我还关心访问权限——尽可能少的程序/事物应该能够触及时间戳。


虽然我更喜欢 MySQL 的答案,但也感谢其他 RDBMS 的解决方案!

4

2 回答 2

5

是的,这是对 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()";
于 2011-12-03T00:39:10.133 回答
2

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

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

您也可以使用它来检查数据并仅在有重要更改时更新您的修改日期。

于 2011-12-03T01:04:29.777 回答