开端
近来开发用户管理模块,涉及到了“账户创建”“最后登录”“最后资料更新”这三个时间戳的表达。
发现了mysql字段默认值CURRENT_TIMESTAMP 和
属性 ON UPDATE CURRENT_TIMESTAMP
如何利用这两个特性,完成以上的三个字段的统计呢?
原理
- 多方查阅,发现CURRENT_TIMESTAMP,只适用于该行数据插入INSERT时,插入时,只需要在sql语句中不插入有该默认值的字段,这个字段就会赋值为插入时的时间戳
- ON UPDATE CURRENT_TIMESTAMP则是只适用于该行数据UPDATE更新时,每当该行数据发生了UPDATE操作,有该属性字段就会自动赋值为插入的时间戳
- 假若一个字段默认值CURRENT_TIMESTAMP和属性ON UPDATE CURRENT_TIMESTAMP都同时具备呢?
答案很确定,就是INSERT和UPDATE时,这个字段都会刷新
完成功能
回到开端,我要解决“账户创建”“最后登录”“最后资料更新”这三个时间戳的表达。
- 账户创建:这个时间戳应该|只|在用户数据创建时生成,且之后永不更改,|只|拥有默认值CURRENT_TIMESTAMP最合适不过
- 账户更新:这个时间戳应该|只|在用户数据更新时刷新,且之后永不更改,|只|拥有属性ON UPDATE CURRENT_TIMESTAMP最合适不过
- 账户登录:因为登录不是仅仅是UPDATE和INSERT那么简单,他是要经过程序逻辑(验证等)的,必须在符合条件的UPDATE时,这个字段才能更新。
所以要使用NOW()函数了,如UPDATE usr SET last_login = NOW() WHERE user = 'LYJSpeedX'
NOW()不需要引号哦
坚持原创,记录点滴 ©️LYJSpeedX