如何自动更新表更新的时间戳?

时间:2015-04-15 19:14:52

标签: mysql database mysqli

我有这个表与newspost,我想添加日期添加时间戳,我想在编辑帖子时更新另一个col。我希望它在MySql中自动发生。不使用任何PHP代码。

   CREATE TABLE IF NOT EXISTS news (
      id int(11) NOT NULL AUTO_INCREMENT,
      data text,
      date_published timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
      date_edited timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
      PRIMARY KEY (id)
    );

在这种情况下,最佳做法是什么?

2 个答案:

答案 0 :(得分:3)

考虑使用触发器。来自MySQL docs

  

触发器是与表关联的命名数据库对象,并在表发生特定事件时激活。触发器的一些用途是执行对要插入表中的值的检查,或者对更新中涉及的值执行计算。

触发器示例:

CREATE TRIGGER trigger_example AFTER UPDATE ON news
FOR EACH ROW UPDATE some_table SET another_column = NEW.data;

答案 1 :(得分:1)

您只能在表格的一个时间戳列中使用DEFAULT CURRENT_TIMESTAMPON UPDATE CURRENT_TIMESTAMP功能。

使用下表定义关闭date_published的功能并将其用于date_edited:

CREATE TABLE IF NOT EXISTS news (
   id INT(11) NOT NULL AUTO_INCREMENT,
   data TEXT,
   date_published TIMESTAMP NOT NULL DEFAULT 0,
   date_edited TIMESTAMP NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP,
   PRIMARY KEY (id)
 );

插入新行时,为date_published传递NULL值,以自动将当前时间戳分配给该列。

Automatic Initialization and Updating for TIMESTAMP上的MySQL文档:

  

它不一定是表中的第一个TIMESTAMP列   自动初始化或更新为当前时间戳。   但是,要为a指定自动初始化或更新   不同的TIMESTAMP列,必须禁止自动属性   对于第一个。然后,为其他TIMESTAMP列,规则   DEFAULT和ON UPDATE子句与第一个子句相同   TIMESTAMP列,但如果省略两个子句,则不会自动   发生初始化或更新。

     

要抑制第一个TIMESTAMP列的自动属性,请执行此操作   以下任一项:

     
      
  • 使用DEFAULT子句定义列,该子句指定常量默认值。
  •   
  • 指定NULL属性。这也会导致列允许NULL值,这意味着您无法通过将列设置为NULL来分配当前时间戳。分配NULL会将列设置为NULL。
  •