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

Mat*_*ick 7 mysql sql timestamp database-trigger mysql-error-1293

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

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

create table def (
  id int, 
  creation timestamp 
    default CURRENT_TIMESTAMP, 
  modification timestamp 
    on update CURRENT_TIMESTAMP
);
Run Code Online (Sandbox Code Playgroud)

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

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

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

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


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

Mik*_*ell 5

是的,这是对MySQL的限制。如果要通过应用程序,则可以为created_at列添加time()调用,并让Updated_at列使用CURRENT_TIMESTAMP。

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = " . time();
Run Code Online (Sandbox Code Playgroud)

我选择在created_at列上执行此操作,因为它可能不会像update_at列那样经常被触摸。

-编辑-

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

$sql = "INSERT INTO my_table SET name = 'Mike', created_at = NOW()";
Run Code Online (Sandbox Code Playgroud)