您的位置:首页 > 数据库 > MySQL

mysql中的CURRENT_TIMESTAMP和ON UPDATE CURRENT_TIMESTAMP的区别及与用户管理的关系

2018-08-13 23:07 399 查看
版权声明:©️Jan Franklin 做不复制黏贴的博客主 https://blog.csdn.net/weixin_42917830/article/details/81638842

开端

近来开发用户管理模块,涉及到了“账户创建”“最后登录”“最后资料更新”这三个时间戳的表达。

发现了mysql字段默认值CURRENT_TIMESTAMP 和
属性 ON UPDATE CURRENT_TIMESTAMP

如何利用这两个特性,完成以上的三个字段的统计呢?

原理

  1. 多方查阅,发现CURRENT_TIMESTAMP,只适用于该行数据插入INSERT时,插入时,只需要在sql语句中不插入有该默认值的字段,这个字段就会赋值为插入时的时间戳
  2. ON UPDATE CURRENT_TIMESTAMP则是只适用于该行数据UPDATE更新时,每当该行数据发生了UPDATE操作,有该属性字段就会自动赋值为插入的时间戳
  3. 假若一个字段默认值CURRENT_TIMESTAMP和属性ON UPDATE CURRENT_TIMESTAMP都同时具备呢?
    答案很确定,就是INSERT和UPDATE时,这个字段都会刷新

完成功能

回到开端,我要解决“账户创建”“最后登录”“最后资料更新”这三个时间戳的表达。

  1. 账户创建:这个时间戳应该|只|在用户数据创建时生成,且之后永不更改,|只|拥有默认值CURRENT_TIMESTAMP最合适不过
  2. 账户更新:这个时间戳应该|只|在用户数据更新时刷新,且之后永不更改,|只|拥有属性ON UPDATE CURRENT_TIMESTAMP最合适不过
  3. 账户登录:因为登录不是仅仅是UPDATE和INSERT那么简单,他是要经过程序逻辑(验证等)的,必须在符合条件的UPDATE时,这个字段才能更新。
    所以要使用NOW()函数了,如
    UPDATE usr SET last_login = NOW() WHERE user = 'LYJSpeedX'

    NOW()不需要引号哦

坚持原创,记录点滴 ©️LYJSpeedX

阅读更多
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: