📌  相关文章
📜  sql auto update dupdated_at - Go 编程语言 - Go 编程语言(1)

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

SQL 自动更新 updated_at

在 SQL 数据库中,经常需要记录数据的最后更新时间。这样可以在应用程序中对数据进行更新操作时,自动生成更新时间,而无需手动指定。

在许多 SQL 数据库中,都提供了自动更新 updated_at 时间戳列的功能。本文将演示如何在 Go 编程语言中利用 SQL 自动更新 updated_at 时间戳列。

自动更新 updated_at

可以通过在数据库表格中添加 updated_at 时间戳列,来自动记录数据的最后更新时间。在 MySQL 中,可以通过以下语句创建具有自动更新 updated_at 时间戳列的表格:

CREATE TABLE `mytable` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) DEFAULT NULL,
  `created_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `updated_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_0900_ai_ci;

在上述语句中,updated_at 列具有 DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP 属性,该属性会在每次更新数据时,自动更新 updated_at 时间戳列。

使用 Go 自动更新 updated_at

在 Go 中,可以利用 SQL 的 RowsAffected 方法和 StmtExecContext 接口实现自动更新 updated_at 时间戳列。

func update(db *sql.DB, id int, name string) (int64, error) {
    stmt, err := db.Prepare("UPDATE mytable SET name=?, updated_at=CURRENT_TIMESTAMP WHERE id=?")
    if err != nil {
        return 0, err
    }
    res, err := stmt.ExecContext(context.Background(), name, id)
    if err != nil {
        return 0, err
    }
    return res.RowsAffected()
}

在上述代码中,SQL 语句 UPDATE mytable SET name=?, updated_at=CURRENT_TIMESTAMP WHERE id=? 会自动更新 updated_at 时间戳列。

总结

在本文中,我们介绍了 SQL 自动更新 updated_at 时间戳列的功能,并演示了如何在 Go 编程语言中利用 SQL 实现自动更新功能。这样可以使应用程序中的代码更清晰简洁,并减少手动维护更新时间的繁琐工作。