向mysql表中插入/更新数据时自动添加创建时间/更新时间

本文介绍两种优化MySQL数据库中时间字段的方法:一是通过修改字段类型为TIMESTAMP并设置默认值为CURRENT_TIMESTAMP实现自动添加及更新时间;二是配置生成策略进一步优化。文章通过示例展示了如何在插入和更新数据时自动维护创建时间和更新时间。

目录

 

处理方式一:修改数据库字段类型

测试插入数据:

测试更新数据:

处理方式二:配置生成策略


[MySQL版本] 8.x

处理方式一:修改数据库字段类型

自动添加创建时间:

将字段类型设置为TIMESTAMP,非空、默认值为:CURRENT_TIMESTAMP

ALTER TABLE t_type MODIFY COLUMN create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL COMMENT '创建时间';

自动更新更新时间:

将字段类型设置为TIMESTAMP,非空、默认值为:

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP

ALTER TABLE t_type MODIFY COLUMN update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP NOT NULL COMMENT '更新时间';

测试插入数据:

    @Autowired
    private ITypeMapper typeMapper;

    @Test
    public void testInsertCurrentTime(){
        IType type = new IType();
        type.setName("散文");
        type.setUserId(81);
        typeMapper.insertType(type);
    }

 执行SQL:

==>  Preparing: INSERT INTO t_type (type_name, user_id) VALUES(?,?);
==> Parameters: 散文(String), 81(Integer)
<==    Updates: 1

数据库中记录:

 插入数据时自动添加了创建时间和更新时间;

测试更新数据:

    @Test
    public void testInsertCurrentTime(){
        IType type = new IType();
        type.setName("小说");
        type.setUserId(81);
        typeMapper.updateType(type);
    }

执行SQL:

==>  Preparing: UPDATE t_type SET type_name=? WHERE user_id=?;
==> Parameters: 小说(String), 81(Integer)
<==    Updates: 1

数据库中记录:

处理方式二:配置生成策略

。。。。更新ing

MySQL创建一个日期字段,并在插入数据自动添加当前日期,可以使用 `DATE` 或 `DATETIME` 类型,并结合 `DEFAULT CURRENT_TIMESTAMP` 属性。这种方式确保在插入记录,如果未显式提供该字段的值,则会自动填充当前的日期和时间。 以下是一个示例创建语句: ```sql CREATE TABLE `example_table` ( `id` INT(10) NULL DEFAULT NULL, `created_at` DATE NULL DEFAULT CURRENT_TIMESTAMP ); ``` 在上述示例中,`created_at` 字段被定义为 `DATE` 类型,并且设置了 `DEFAULT CURRENT_TIMESTAMP`,这意味着当插入新记录,如果没有为 `created_at` 提供值,它将自动设置为当前的日期[^2]。 需要注意的是,`CURRENT_TIMESTAMP` 默认情况下只在记录插入设置当前时间,在更新记录不会自动更改时间,除非特别指定 `ON UPDATE CURRENT_TIMESTAMP` 属性。然而,对于 `DATE` 类型的字段,`ON UPDATE CURRENT_TIMESTAMP` 可能不会按预期工作,这取决于 MySQL 的版本和配置[^3]。 如果你希望在记录更新自动更新时间戳,建议使用 `DATETIME` 类型并添加 `ON UPDATE CURRENT_TIMESTAMP` 属性: ```sql CREATE TABLE `example_table` ( `id` INT(10) NULL DEFAULT NULL, `created_at` DATETIME NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP ); ``` 这样,`created_at` 字段将在插入设置当前时间,并在后续更新记录自动更新时间戳。 请注意,在某些 MySQL 配置下,如 SQL 模式包含 `STRICT_TRANS_TABLES`,尝试插入一个没有为 `DATE` 或 `DATETIME` 字段提供值的记录可能会导致错误,除非这些字段具有默认值或允许 `NULL` 值[^4]。
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值