vlambda博客
学习文章列表

003-mysql建表时自动生成时间

    对于mysql创建的表时,一般需要添加create_time, 以及last_modify_time用来记录的创建时间,以及最后一次更新时间,对于last_modify_time要求每次记录修改都需要进行更新,如果放在代码端实现,将会非常麻烦,增加不必要的工作量,其实可以通过充分利用数据库提供功能进行实现。实现如下:

   1、新增 create_time, last_modify_time 字段,类型选择 timestamp, 注意如果需要显示至毫秒的话,注意将长度设置为3或者直接使用timestamp(3)。

    2、设置默认值为:CURRENT_TIMESTAMP。

    3、如果用的是navicat 注意下面有一个 根据当前时间戳更新,如下所示:

  对于create_time 不要勾选,对于last_modify_time勾选上。

  该选项作用时,如果勾选这条记录每次保存,该字段都会更新。


sql语名如下:

CREATE TABLE `t_stud_info` ( `id` int(11) NOT NULL AUTO_INCREMENT, `user_name` varchar(255) DEFAULT NULL, `user_mobile` varchar(255) DEFAULT NULL, `create_time` timestamp(3) NULL DEFAULT current_timestamp(3), `last_modify_time` timestamp(3) NULL DEFAULT current_timestamp(3) ON UPDATE current_timestamp(3), PRIMARY KEY (`id`)) ENGINE=InnoDB AUTO_INCREMENT=13 DEFAULT CHARSET=utf8;


附mysql关于时间戳与时间相互转换函数

-- 日期转换为时间戳select UNIX_TIMESTAMP('2020-03-12 15:14:22');
-- 时间戳转换为日期select FROM_UNIXTIME(1584026062);



附Java关于时间与时间戳的转换关系

public static void test2() { try{ SimpleDateFormat sFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss SSS"); String string = "2020-03-12 15:20:33 790"; long stramp = sFormat.parse(string).getTime();  System.out.println("--------" + string + ":" + stramp);  String time_date = sFormat.format(new Date(stramp)); System.out.println("--------" + stramp + ":" + time_date);
}catch(Exception e){ e.printStackTrace(); } }


    时间戳的基本原理为以1970-01-01为时间起点,当前时间所经历过的毫秒数,所以可以发现时间戳的后三位即为毫秒数,如果只需要精确到秒,需要除以1000即可,如果精确到分,则需要除以 60*1000, 依次类推到小时,天,分别为 60*60*1000, 24*60*60*1000,但是对于年月需要特列注意,月份天数,以及年份天数,需作特殊处理。