mysql数据存储实战|青训营笔记

67 阅读3分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的第四篇笔记
在做抖音项目时,需要使用开源数据库mysql来持久化存储数据,这篇文章整理了mysql的常用知识,包括数据类型及应用场景,主键,和字符集。

数据类型

mysql的数据类型主要分为以下几类:
整形:tinyint int bigint
日期:datetime timestamp
浮点数:一般使用decimal
字符串:char varchar text
二进制数据:blob

整数

整形变量一般在满足数据范围的需求下的选择占用空间最小的类型
如一些状态变量可以使用tinyint
如果业务规模较大,表的自增主键使用bigint

日期和时间

datetime占用8个字节,其值与时区无关,也就是说改变时区配置不会影响,可保存至毫秒级,可保存的时间范围大
timestamp占用4个字节,最多存储到2038年,时间精确到秒,依赖数据库设置的时区,可以设置自动更新 date类型只占3个字节,mysql内建了很多对应时间函数用户计算,date类型跟可以存储到9999-12-31号

字符串类型

char是定长的字符串,最大长度255,char类型会自动删除末尾的空格、查询效率比varchar高,一般用于存储消息摘要,MD5哈希值,以及短字符串、经常更新的字符串
相对于固定长度的char,varchar(n)会根据内容的长度保存数据,当n小于255时使用一个字节来保存数据,否则使用两个字节。在mysql5.6之前变更长度时可能导致锁表。
varchar是使用非常频繁的类型,常见的场景有:

  • 存储长度波动大的数据,比如文章内容
  • 字符串多查询但很少更新的场景
  • 特殊字符,如汉字,表情等

主键的选择

  • 代理主键 即与业务无关的、无意义的随机数字序列,如无符号自增ID或雪花算法
  • 自然主键 事物自身属性中的唯一标识,比如人的身份证号码
    一般情况下我们会使用代理主键,这样与业务耦合度低,更容易维护。

字符集

如果不需要存储汉字,表情等特殊字符,选latin1,这样会节省大量的存储空间。 如果需要使用 utf 或者 unicode 建议对某列单独设置,防止不必要的空间浪费。 如果需要存储emoji选择utfbm64否则utf-8就足够使用了。

总结

mysql是一个相当大的话题了,还有范式,索引,存储引擎等很多地方可以讨论,这篇文章主要分享的是数据类型,字符集等基础知识。进阶话题以后有机会再来讨论。