MySQL自动填充create_time和update_time的两种方式

yizhihongxing

MySQL的自动填充 create_time 和 update_time 字段有2种常见方式:

  1. 使用触发器自动填充

可以在创建表的时候编写触发器来自动生成时间,以下是示例代码:

CREATE TRIGGER `trg_users_created_at` BEFORE INSERT
ON `users` FOR EACH ROW
SET NEW.created_at = NOW(), NEW.updated_at = NOW();

CREATE TRIGGER `trg_users_updated_at` BEFORE UPDATE
ON `users` FOR EACH ROW
SET NEW.updated_at = NOW();

以上代码在新增数据和更新数据时会自动填充 created_at 和 updated_at 字段,其中 created_at 在 INSERT 时生效,在 UPDATE 时生成值会被更新,而 updated_at 在 INSERT 和 UPDATE 时都会生效。

  1. 使用 TIMESTAMP 默认值

在创建数据表的时候,直接使用 TIMESTAMP 数据类型并设置默认值为 CURRENT_TIMESTAMP,如下示例:

CREATE TABLE `users` (
  `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(50) DEFAULT "",
  `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;

以上代码直接给 create_time 和 update_time 设定了默认值为 CURRENT_TIMESTAMP,INSERT 和 UPDATE 时会自动更新时间字段。

当使用 TIMESTAMP 类型来记录时间因为有一定的误差和不同数据库的时区问题,所以如果对时间精度要求比较高或是对时间要求非常严格的业务需要自己手动维护时间。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:MySQL自动填充create_time和update_time的两种方式 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • oracle中where 子句和having子句中的区别介绍

    当我们在使用 Oracle 数据库的时候,经常需要使用到where子句和having子句来约束查询结果。尽管它们都是用于过滤数据的,但是它们还是存在一定的区别。下面我们详细介绍一下这两个子句之间的区别。 where子句 where子句用于 SELECT 语句中,确定是否包括要返回的行。where子句对应的是表格中的单个行。where子句去掉不需要的行,只剩下…

    database 2023年5月21日
    00
  • MySql报错Table mysql.plugin doesn’t exist的解决方法

    针对“MySql报错Table mysql.plugin doesn’t exist的解决方法”的问题,下面是一些解决方法: 问题描述 MySQL客户端报错Table mysql.plugin doesn’t exist,这个问题通常是因为MySQL数据库实例升级或者版本兼容性问题导致的。 解决方法1:使用mysql_install_db初始化MySQL m…

    database 2023年5月18日
    00
  • PHP的命令行命令使用指南

    PHP的命令行命令使用指南 PHP是一种非常流行的开源脚本语言,常用于Web开发。除了使用PHP作为Web服务器端编程语言外,你也可以使用PHP作为命令行工具,在命令行模式下运行PHP脚本。本文将详细讲解如何在命令行模式下使用PHP。 1. 命令行环境的准备 在使用PHP命令行之前,必须先确保PHP已经正确安装,并将PHP的可执行文件路径添加到系统环境变量P…

    database 2023年5月22日
    00
  • DBMS 实例和模式

    DBMS 是数据库管理系统的缩写,它是一种大型软件系统,在其中您可以存储、操作和管理大量数据。DBMS 还允许多个用户同时访问数据库,并且还可以提供许多其他有用的功能。DBMS 具有实例和模式两个重要概念。下面详细讲解这两个概念及其关系: DBMS 实例 DBMS 实例是运行数据库服务的进程,该进程负责管理数据库的内存、缓存、I/O等操作。 实例是一个操作的…

    database 2023年3月27日
    00
  • pymysql 插入数据 转义处理方式

    当使用pymysql向MySQL数据库中插入数据时,需要注意字符串中可能含有引号、单引号、反斜杠等特殊字符,这些字符可能导致SQL语句语法出现错误。为了避免这种情况,需要使用转义处理方式,将特殊字符转换为可以被SQL语句安全接收的形式。 以下是pymysql插入数据的转义处理方式: 使用pymysql.escape_string()函数 pymysql.es…

    database 2023年5月22日
    00
  • MySQL case when使用方法实例解析

    MySQL case when使用方法实例解析 一、介绍 MySQL中的case when语法可以让我们更加灵活地处理数据,可以根据指定的条件返回不同的结果。使用case when结构通常会为在单个查询中使用IF语句或选择性SUM做法提供更清晰和可读性更高的代码结构。 二、基础语法 以下是MySQL case when基础语法的示例: SELECT colu…

    database 2023年5月22日
    00
  • 基于多CPU多核架构的redis性能优化

    目录 CPU架构 问题 优化 CPU架构 一个 CPU 处理器中一般有多个物理核。 每个物理核都拥有私有的一级缓存( L1 cache)和私有的二级缓存(L2 cache)。 不同的物理核还会共享一个共同的三级缓存 每个物理核通常都会运行两个超线程,也叫作逻辑核。同一个物理核的逻辑核会共享使用 L1、L2 缓存 不同处理器间通过总线连接 问题 1、多CPU:…

    Redis 2023年4月12日
    00
  • MySQL Truncate用法详解

    MySQL Truncate用法详解 什么是Truncate? Truncate是MySQL的一个数据操作语句,用于清空一张数据表的所有数据,但是保留表结构。和DROP TABLE不同,使用Truncate操作并不会删除数据表,只是清空了表内的数据。 因为Truncate只清空数据而不删除表结构,所以执行Truncate操作比DELETE操作更快,尤其是对于…

    database 2023年5月22日
    00
合作推广
合作推广
分享本页
返回顶部