zoukankan      html  css  js  c++  java
  • MYSQL timestamp用法

    问题来源

    在业务系统中,有时候想要知道用户最后一次活动距离现在的时间。记得mysql是有这样的字段的,可以直接在一条记录更新时,自动更新时间。上网查了查,找到了,是timestamp类型。

    用法

    在表中定义一个timestamp类型的字段,如下所示:

    create table test(
        id integer primary key auto_increment,
        name varchar(256) not null,
        createdAt timestamp default current_timestamp on update current_timestamp
    );

    createdAt字段被定义为timestamp类型,而且默认值是当前时间戳,当记录发生更新时,该字段同时会更新为当前时间戳。timestamp等于是提供了对一条对数据自身修改时间的记录。 
    依据不同的场景,一般timestamp会有几类用法:

    在记录创建修改时都刷新

    参见上面的例子,在sql语句上,要同时注明default字段和on update字段。

    createdAt timestamp default current_timestamp on update current_timestamp

    只在记录创建时刷新时间,以后修改时不再刷新

    如下所示,在定义字段时删去on update语句。

    createdAt timestamp default current_timestamp

    在创建时将字段设置为0,以后修改时刷新

    只有on update语句。

    createdAt timestamp on update current_timestamp

    在创建时给一个定值,修改时刷新

    只有on update语句。

    createdAt timestamp DEFAULT ‘yyyy-mm-dd hh:mm:ss' on update current_timestamp

    这样,在记录发生变化时,可以根据需要记录时间戳。

    字段更新值和原值一样的情况

    假定我们更新了表的某个字段,例如name属性,createdAt也可以相应刷新。但是有一种情况例外,就是如果更新值和原值一样,mysql出于优化考虑,并不会执行任何操作。此时,为了记录时间,可以强制刷新时间戳。

    update table test set name = '<new name>', createdAt = current_timestamp where id = 1;

    读取时间戳

    如果要读出时间戳,又该怎么使用呢?

    select unix_timestamp(createdAt) as tt from test

    如上所示,该语句可以读出来以秒为单位的时间戳,然后就可以进行各种比较和运算了

  • 相关阅读:
    openssl生成公钥私钥对 加解密
    boost replace_if replace_all_regex_copy用法
    PS 图像滤镜— — USM 锐化
    使用boost库生成 随机数 随机字符串
    改动Android设备信息,如改动手机型号为iPhone7黄金土豪版!
    验证(Verification)与确认(Validation)的差别
    Spring-SpringMVC-Hibernate整合
    全面整理的C++面试题
    Metropolis Hasting算法
    捕捉到来自宇宙深空的神奇X-射线信号
  • 原文地址:https://www.cnblogs.com/albertzhangyu/p/9135029.html
Copyright © 2011-2022 走看看