mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?

最近在尝试着做一个完整的后台管理系统,包括前端和服务端。做为一个入门级 mysql 数据库使用者,一说到 mysql 数据库,我首先想到了它的图形化管理工具 navicat premium。这不,我就用 navicat premium 轻轻松松地创建了一个 website-manage 数据库。

mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?
数据库名字

紧接着,创建了一张 user 表。当中包含的字段如下所示:

mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?
user 表字段

就这样,通过代码对数据库进行 CRUD 时都挺正常。

最后在前端页面上展示时,我想根据创建时间 createTime 进行排序。这一步也没问题~~~

问题

当我修改用户信息时

mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?
修改用户信息

当中只修改了头像、用户名、电话号码、角色。在服务端会再自动给它添加上 updateTime 字段。在控制台中打印的 sql 执行语句如下所示:

mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?
sql 执行语句

根据 id 修改了 user 表的 avatarusernamephoneupdateTime 字段。

可是,问题来了,一刷新数据库,发现,createTime 居然也被更新了,更新成了和 updateTime一样的值。这样我在排序时,因为每次更新时,createTime 都会更新,所以感觉就像是,根据 updateTime 来排序了。这是为什么呢?明明我没有更新 createTime 值,它为什么会改变。

最后,终于找到了问题所在。

通过 navicat premium 创建表字段时,如果表字段的类型为 timestamp。最下面有一个默认的选项 根据当前时间戳更新 被勾选了。这样就导致,如果有传对应时间字段的值,就用传入的对应时间字段的值。如果没有传入那个值。默认就会将这个字段更新为当前时间。也就是我这次遇见的问题。

mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?
默认勾选按钮

将数据库创建语句导出,可以看到。

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(10) UNSIGNED NOT NULL AUTO_INCREMENT,
  `username` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '用户名',
  `password` varchar(64) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '密码',
  `avatar` longtext CHARACTER SET utf8 COLLATE utf8_general_ci NULL COMMENT '头像',
  `phone` varchar(20) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '电话',
  `sign` varchar(300) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL COMMENT '签名',
  `createTime` timestamp NULL DEFAULT NULL  ON UPDATE CURRENT_TIMESTAMP COMMENT '创建时间',
  `updateTime` timestamp NULL DEFAULT NULL ON UPDATE CURRENT_TIMESTAMP COMMENT '更新时间',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 17 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Compact;

createTimeupdateTime 都有一个 ON UPDATE CURRENT_TIMESTAMP 配置。

解决方案

navicat premium 中取消勾选 根据当前时间戳更新 就好了。

总结

基础知识很重要。如果我对 mysql 非常熟悉。这个小问题也不会困扰我好一会儿了。

自己在计算机领域的宽度和深度都还需要提高。



原文始发于微信公众号(前端学习总结):mysql 没有修改 createTime 字段,为什么它的值还是更新了呢?

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/83140.html

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!