当前位置: 首页 > news >正文

吉林手机版建站系统价格网站播放大视频如何做

吉林手机版建站系统价格,网站播放大视频如何做,上海互联网做网站,第三方关键词优化排名在MySQL数据库中,除了前面我们聊到的数字类型和字符串类型,还有一个常用的数据类型:日期类型。在我们业务表中,基本上每个业务表都有日期类型,用于记录创建时间和修改时间。比如我们的用户表,一般除了要记录…

在MySQL数据库中,除了前面我们聊到的数字类型和字符串类型,还有一个常用的数据类型:日期类型。在我们业务表中,基本上每个业务表都有日期类型,用于记录创建时间和修改时间。比如我们的用户表,一般除了要记录用户的注册时间,还要记录最后登录时间。

日期类型虽然常见,但在表结构设计中也容易犯错,比如很多技术都倾向使用整型存储日期类型,同时也会忽略不同日期类型对于性能可能存在的潜在影响。

一、MySQL中有哪些日期类型

MySQL 数据库中常见的日期类型有 YEAR、DATE、TIME、DATETIME、TIMESTAMEP。因为业务绝大部分场景都需要将日期精确到秒,所以在表结构设计中,常见使用的日期类型为DATETIME 和 TIMESTAMP。下面我们来了解一下DATETIME和TIMESTAMP

1、DATETIME

类型 DATETIME 最终展现的形式为:YYYY-MM-DD HH:MM:SS,固定占用 8 个字节。

从 MySQL 5.6 版本开始,DATETIME 类型支持毫秒,DATETIME(N) 中的 N 表示毫秒的精度。例如,DATETIME(6) 表示可以存储 6 位的毫秒值。同时,一些日期函数也支持精确到毫秒,例如常见的函数 NOW、SYSDATE:

mysql> SELECT NOW(6);

+----------------------------+

| NOW(6)                     |

+----------------------------+

| 2024-05-11 17:50:28.707971 |

+----------------------------+

1 row in set (0.00 sec)

用户可以将 DATETIME 初始化值设置为当前时间,并设置自动更新当前时间的属性。例如之前已设计的用户表 User,在其基础上,修改register_date、last_modify_date的定义:

CREATE TABLE User (

    id BIGINT NOT NULL AUTO_INCREMENT,

    name VARCHAR(255NOT NULL,

    sex CHAR(1NOT NULL,

    password VARCHAR(1024NOT NULL,

    money INT NOT NULL DEFAULT 0,

    register_date DATETIME(6NOT NULL DEFAULT CURRENT_TIMESTAMP(6),

    last_modify_date DATETIME(6NOT NULL DEFAULT CURRENT_TIMESTAMP(6ON UPDATE CURRENT_TIMESTAMP(6),

    CHECK (sex = 'M' OR sex = 'F'),

    PRIMARY KEY(id)

);

在上面的表 User 中,列 register_date 表示注册时间,DEFAULT CURRENT_TIMESTAMP 表示记录插入时,若没有指定时间,默认就是当前时间。

列 last_modify_date 表示当前记录最后的修改时间,DEFAULT CURRENT_TIMESTAMP(6) ON UPDATE CURRENT_TIMESTAMP(6) 表示每次修改都会修改为当前时间。

这样的设计保证当用户的余额(money 字段)发生了变更,则 last_modify_date 能记录最后一次用户金钱发生变更时的时间。

mysql> SELECT name,money,last_modify_date FROM User WHERE name = 'David';

+-------+-------+----------------------------+

| name  | money | last_modify_date           |

+-------+-------+----------------------------+

| David |   100 | 2024-05-11 08:08:33.898593 |

+-------+-------+----------------------------+

1 row in set (0.00 sec)



mysql> UPDATE User SET money = money - 1 WHERE name = 'David';

Query OK, 1 row affected (0.06 sec)

Rows matched: 1  Changed: 1  Warnings: 0



mysql> SELECT name,money,last_modify_date FROM User WHERE name = 'David';

+-------+-------+----------------------------+

| name  | money | last_modify_date           |

+-------+-------+----------------------------+

| David |    99 | 2024-05-11 18:29:17.056327 |

+-------+-------+----------------------------+

1 row in set (0.00 sec)

可以看到,当用户金额发生修改时,所对应的字段 last_modify_date 也修改成发生变更的时间。

2、TIMESTAMP

除了 DATETIME,日期类型中还有一种 TIMESTAMP 的时间戳类型,其实际存储的内容为‘1970-01-01 00:00:00’到现在的毫秒数。在 MySQL 中,由于类型 TIMESTAMP 占用 4 个字节,因此其存储的时间上限只能到‘2038-01-19 03:14:07’。

同类型 DATETIME 一样,从 MySQL 5.6 版本开始,类型 TIMESTAMP 也能支持毫秒。与 DATETIME 不同的是,若带有毫秒时,类型 TIMESTAMP 占用 7 个字节,而 DATETIME 无论是否存储毫秒信息,都占用 8 个字节

类型 TIMESTAMP 最大的优点是可以带有时区属性,因为它本质上是从毫秒转化而来。如果业务需要对应不同的国家时区,那么类型 TIMESTAMP 是一种不错的选择。比如新闻类的业务,通常用户想知道这篇新闻发布时对应的自己国家时间,那么 TIMESTAMP 是一种选择。

另外,有些国家会执行夏令时。根据不同的季节,人为地调快或调慢 1 个小时,带有时区属性的 TIMESTAMP 类型本身就能解决这个问题。

参数 time_zone 指定了当前使用的时区,默认为 SYSTEM 使用操作系统时区,用户可以通过该参数指定所需要的时区。

二、表结构设计实践

1、DATETIME、TIMESTAMP和INT,应该用哪个?

在做表结构设计时,对日期字段的存储,开发人员通常会有 3 种选择:DATETIME、TIMESTAMP、INT

INT 类型就是直接存储 '1970-01-01 00:00:00' 到现在的毫秒数,本质和 TIMESTAMP 一样,因此用 INT 不如直接使用 TIMESTAMP。

当然,有人会认为 INT 比 TIMESTAMP 性能更好。但是,由于当前每个 CPU 每秒可执行上亿次的计算,所以无须为这种转换的性能担心。更重要的是,在后期运维和数据分析时,使用 INT 存储日期,是会让 DBA 和数据分析人员发疯的,INT的可运维性太差

也有的技术会热衷用类型 TIMESTEMP 存储日期,因为类型 TIMESTAMP 占用 4 个字节,比 DATETIME 小一半的存储空间。

但若要将时间精确到毫秒,TIMESTAMP 要 7 个字节,和 DATETIME 8 字节差不太多。另一方面,现在距离 TIMESTAMP 的最大值‘2038-01-19 03:14:07’已经很近,这方面还需要大家好好考虑一下。

总的来说,建议你使用类型 DATETIME。 对于时区问题,可以由前端或者服务这里做一次转化,不一定非要在数据库中解决。

2、TIMESTAMP的性能问题

TIMESTAMP 的上限值 2038 年很快就会到来,那时业务又将面临一次类似千年虫的问题。另外,TIMESTAMP 还存在潜在的性能问题。

虽然从毫秒数转换到类型 TIMESTAMP 本身需要的 CPU 指令并不多,这并不会带来直接的性能问题。但是如果使用默认的操作系统时区,则每次通过时区计算时间时,要调用操作系统底层系统函数 __tz_convert(),而这个函数需要额外的加锁操作,以确保这时操作系统时区没有修改。所以,当大规模并发访问时,由于热点资源竞争,会产生两个问题。

  • 性能不如 DATETIME: DATETIME 不存在时区转化问题。

  • 性能抖动: 海量并发时,存在性能抖动问题。

这里针对时区问题,我们应该使用显式时区,而不是使用操作系统的时区,可以在配置文件中显式的设置时区。比如在my.conf中设置:

[mysqld]

time_zone = "+08:00"

三、表设计建议

在做表结构设计规范时,建议每张业务核心表都增加一个 DATETIME 类型的 last_modify_date 字段,并设置修改自动更新机制, 即便标识每条记录最后修改的时间

这样设计的好处是: 用户可以知道每个用户最近一次记录更新的时间,以便做后续的处理。比如在电商的订单表中,可以方便对支付超时的订单做处理;在金融业务中,可以根据用户资金最后的修改时间做相应的资金核对等。

文章将持续更新,欢迎关注公众号:服务端技术精选。欢迎点赞、关注、转发

http://www.yayakq.cn/news/363360/

相关文章:

  • 网站推广seo蜘蛛屯优化排名万能视频下载工具
  • 广州住房和建设局网站外链代发平台
  • 备案时网站建设方案书纪念馆展厅设计
  • 【转】网页 网站 html如何实现"关闭窗口"代码大全网站设计师的工作内容
  • 高埗网站建设公司如何做正规电影网站
  • 济南网站备案流程杭州seo的优化
  • 做网站和app怎么跑业务买国外的东西在哪个平台
  • 河南郑州网站建设哪家公司好小程序样式模板
  • 网站备案流程何时改怎样设计网站首页
  • 负面信息搜索引擎 网站网站空间200m
  • 义乌建设银行交罚款网站成全视频免费观看在线看记忆深处的作文怎么写
  • 潢川手机网站建设自己怎么个人网站
  • 建立简单网站制作一个网页的步骤
  • 仿站小工具怎么用公司员工培训方案
  • 河北区网站建设表白网页链接大全
  • 济南行知网站建设wordpress自定义404
  • 网站建设 话术如何用dreamer做网站
  • 服务器网站怎么做的免费自助建站软件
  • 做网站加班多吗建外贸商城网站
  • 一个公司名可以备案多少个网站织梦可以仿所有网站吗
  • dw网站建设的心得体会国内最厉害的公关团队
  • 惠城网站制作优化营商环境存在问题及整改措施
  • 郑州做网站的公司msgg手机写代码的软件
  • 雄县哪里有建设网站的asp网站做文件共享上传
  • 网站二级导航制作免费虚拟机安卓版
  • 网站首页做一点开有动画网店推广方法和技巧
  • 网站建设服务宗旨安新seo优化排名网站
  • 做vi设计的网站网站建设 牛商网
  • 公司网站链接怎么弄有什么网站专做买生活污水设备
  • 成都信用体系建设网站佛山做网站yunzhanfs