在MySQL中,常常会用到插入数据后自动更新时间,通常是在插入或更新记录时自动设置或更新时间戳字段。

最常使用的方法:在创建表时为时间戳字段设置默认值。如,使用CURRENT_TIMESTAMP作为默认值,这样每次插入新记录时,该字段会自动设置为当前时间戳。

CREATE TABLE example_table (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name text,
    updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);
  • TIMESTAMP指定了列的数据类型为时间戳,用于存储日期和时间。

  • DEFAULT CURRENT_TIMESTAMPupdated_at列设置了默认值,即在插入新记录时,如果没有指定updated_at的值,它将自动设置为当前的时间戳。

  • ON UPDATE CURRENT_TIMESTAMP是一个属性,它指示每当表中的记录被更新时,updated_at列将自动更新为当前的时间戳。

重点看ON UPDATE CURRENT_TIMESTAMP 当我们设置了这个属性之后,MySQL只会在字段值发生变化时更新时间戳。如果更新的数据没有变化,即使执行了更新语句,时间戳也不会更新。这是因为ON UPDATE触发器只会在字段值实际改变时触发。

例如:一组数据

id

name

updated_at

1

kao

2024-10-30 13:55:36

此时我们执行一个更新操作,但并未改变name字段的值,那么updated_at字段将不会发生变化。

UPDATE example_table SET name = 'kao' WHERE id = 1;

为避免这种自动更新机制可能带来的不便,有时我们需要采取其他策略来确保时间戳的准确更新。一种常见的方法是使用触发器或应用程序逻辑在每次更新数据时明确更新时间戳字段。这样,即使数据未发生变化,我们也可以确保时间戳得到更新。