📜  mysql 在更新时更改时间戳 - SQL (1)

📅  最后修改于: 2023-12-03 15:33:03.111000             🧑  作者: Mango

MySQL 在更新时更改时间戳 - SQL

在 MySQL 中,我们可以使用 UPDATE 语句来更新数据表中的数据。但是,如果我们想要在更新时自动更改时间戳,该怎么做呢?本文将介绍两种方法来实现这个目标。

方法一:使用 BEFORE UPDATE 触发器

1. 创建数据表

首先,我们需要创建一个数据表来测试这个功能。以下是一个简单的 blog 数据表,其中包含 idtitlecontentupdated_at 四个字段。

CREATE TABLE `blog` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `title` varchar(255) NOT NULL,
  `content` text NOT NULL,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

2. 创建 BEFORE UPDATE 触发器

接下来,我们需要创建一个 BEFORE UPDATE 触发器,这个触发器将在数据表更新时自动更新 updated_at 字段的值。

CREATE TRIGGER `update_blog_updated_at` BEFORE UPDATE ON `blog` FOR EACH ROW
BEGIN
  SET NEW.updated_at = NOW();
END;

触发器执行的逻辑很简单:在每次更新数据表中的一行时,它会将 updated_at 字段的值设置为当前时间戳。

3. 测试更新数据

现在,我们可以测试一下这个功能是否正常工作了。假设我们想要更新 id 为 1 的博客文章的内容:

UPDATE `blog` SET `content` = 'New content' WHERE `id` = 1;

执行完以上语句后,我们可以查询 blog 表,看一下 updated_at 字段的值是否被更新了:

SELECT `updated_at` FROM `blog` WHERE `id` = 1;
方法二:使用 ON UPDATE 的属性

除了使用触发器外,MySQL 还提供了一个更简单的方法来在更新时自动更改时间戳,那就是使用 ON UPDATE 的属性。

1. 修改数据表

我们需要修改 blog 数据表,将 updated_at 字段的类型改为 timestamp 并添加 ON UPDATE CURRENT_TIMESTAMP 的属性:

ALTER TABLE `blog` MODIFY COLUMN `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP;

这个语句将会将 updated_at 字段的类型从 timestamp 修改为 timestamp 并添加了一个 ON UPDATE CURRENT_TIMESTAMP 的属性,表示 updated_at 字段将在每次更新数据表中的一行时自动设置为当前时间戳。

2. 测试更新数据

现在,我们可以测试一下这个功能是否正常工作了。假设我们想要更新 id 为 1 的博客文章的内容:

UPDATE `blog` SET `content` = 'New content' WHERE `id` = 1;

执行完以上语句后,我们可以查询 blog 表,看一下 updated_at 字段的值是否被更新了:

SELECT `updated_at` FROM `blog` WHERE `id` = 1;
结论

使用以上两种方式,我们都可以在 MySQL 中实现在更新时自动更改时间戳的功能。具体选择哪一种方式取决于你的偏好和具体情况。触发器会增加一些代码的复杂度,但是它更加灵活,可以自定义触发条件。而属性方式则更加简单直接,但是它对表结构所需做的修改比较大,不一定适用于所有的情况。