mysql三m架构为什么_疯狂MySQL系列(三)

欢迎来到疯狂MySQL系列的第三节

上一节咱们终于开始用MySQL干正事了——增删改查

本节咱们将详细地介绍MySQL的数据类型,学习完本节,相信你能够对MySQL的数据类型不再模糊

数值类型

整数型

equation?tex=%5Cbegin%7Barray%7D%7Bc%7Cc%7D+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E7%B1%BB%E5%9E%8B%E5%90%8D%E7%A7%B0%7D%7D++%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E8%AF%B4%E6%98%8E%7D%7D++%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E5%AD%98%E5%82%A8%E5%A4%A7%E5%B0%8F%7D%7D+%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E9%BB%98%E8%AE%A4%E6%98%BE%E7%A4%BA%E5%AE%BD%E5%BA%A6%7D%7D+%5C%5C+%5Chline+TINYINT+%26+%E6%9C%80%E5%B0%8F%E7%9A%84%E6%95%B4%E6%95%B0+%26+1%E5%AD%97%E8%8A%82+%26+4+%5C%5C+SMALLINT+%26+%E5%B0%8F%E7%9A%84%E6%95%B4%E6%95%B0+%26+2%E5%AD%97%E8%8A%82+%26+6+%5C%5C+MEDIUMINT+%26+%E4%B8%AD%E7%AD%89%E5%A4%A7%E5%B0%8F%E7%9A%84%E6%95%B4%E6%95%B0+%26+3%E5%AD%97%E8%8A%82+%26+9+%5C%5C+INT+%26+%E6%99%AE%E9%80%9A%E5%A4%A7%E5%B0%8F%E7%9A%84%E6%95%B4%E6%95%B0+%26+4%E5%AD%97%E8%8A%82+%26+11+%5C%5C+BIGINT+%26+%E5%A4%A7%E6%95%B4%E6%95%B0+%26+1%E5%AD%97%E8%8A%82+%26+4+%5C%5C+%5Cend%7Barray%7D%5C%5C默认都是有符号位的 ,如果要使用无符号,请在前面加 UNSIGNED

INT(显示位数,包含符号位),表中列出了默认显示位数,也可以自己指定

宽度只是用于显示,与其存储空间并没什么关系,注意,如果是有符号的,负号也是要占用一个显示位的,比如 TINYINT 有符号最小为 -128,就是占用了 4 位显示位

浮点型

equation?tex=%5Cbegin%7Barray%7D%7Bc%7Cc%7D+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E7%B1%BB%E5%9E%8B%E5%90%8D%E7%A7%B0%7D%7D+%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E8%AF%B4%E6%98%8E%7D%7D++%26%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E5%AD%98%E5%82%A8%E5%A4%A7%E5%B0%8F%7D%7D+%5C%5C+%5Chline+FLOAT+%26+%E5%8D%95%E7%B2%BE%E5%BA%A6%E6%B5%AE%E7%82%B9%E6%95%B0+%26+4%E5%AD%97%E8%8A%82+%5C%5C+DOUBLE+%26+%E5%8F%8C%E7%B2%BE%E5%BA%A6%E6%B5%AE%E7%82%B9%E6%95%B0+%26+8%E5%AD%97%E8%8A%82+%5C%5C+DECIMAL%28M%2CD%29+%26+%E5%AE%9A%E7%82%B9%E7%B1%BB%E5%9E%8B+%26+M%2B2%E5%AD%97%E8%8A%82%5C%5C+%5Cend%7Barray%7D%5C%5C以上3种类型都可以指定位数,比如 : FLOAT(M, D) ,表示一共M位数字位,D位是小数的数位, 比如,FLOAT(6, 2)表示,一共有6位数,其中小数有2位

DECIMAL 类型最高存储38位

如果插入数据超出存储范围,就进行四舍五入

尽量避免进行浮点数比较

日期与时间类型

equation?tex=%5Cbegin%7Barray%7D%7Bc%7Cc%7D+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E7%B1%BB%E5%9E%8B%E5%90%8D%E7%A7%B0%7D%7D+%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E6%97%A5%E6%9C%9F%E6%A0%BC%E5%BC%8F%7D%7D++%26%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E6%97%A5%E6%9C%9F%E8%8C%83%E5%9B%B4%7D%7D+%26%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E5%AD%98%E5%82%A8%E9%9C%80%E6%B1%82%7D%7D%5C%5C++%5Chline++YEAR+%26+YYYY+%26+1901+-+2155+%26+1%E5%AD%97%E8%8A%82%5C%5C++TIME+%26+HH%3AMM%3ASS+%26+-838%3A59%3A59+-+838%3A59%3A59+%26+3%E5%AD%97%E8%8A%82%5C%5C+DATE+%26+YYYY-MM-DD+%26+1000-01-01+-+9999-12-3+%26+3%E5%AD%97%E8%8A%82%5C%5C+DATETIME+%26+YYYY-MM-DD+HH%3AMM%3ASS+%26+%E8%A7%81%E4%B8%8B%E9%9D%A2%E8%AF%A6%E8%A7%A3+%26+8%E5%AD%97%E8%8A%82%5C%5C+TIMESTAMP+%26+YYYY-MM-DD+HH%3AMM%3ASS+%26+%E8%A7%81%E4%B8%8B%E9%9D%A2%E8%AF%A6%E8%A7%A3+%26+4%E5%AD%97%E8%8A%82+%5Cend%7Barray%7D%5C%5CYEAR 在使用时,插入字符串或者普通数字都可以,例如:’1991’ 或 1991 都可以

TIME 格式可以没有分隔符’:',但是时分秒必须都有意义,否则插入的是00:00:00,比如 101112 有意义,而 109712 没有意义,因为 97 已经超过了 60

TIME 除了列表中的格式外,还可以有以下的格式。HH:MM,D HH:MM,D HH,SS,D 表示日,可以取 0 ~ 34 之间的值,插入时,D 被转换为小时,在小时那一栏将会存储为 24*D + HH

DATETIME 在存储时,输入什么就是什么;而 TIMESTAMP 会根据当地时区进行换算成UTC时间后存储,查询时,也会进行换算成当地时间

DATETIME 范围:1000-01-01 00:00:00.000000 - 9999-12-31 23:59:59.999999

TIMESTAMP 范围:1970-01-01 00:00:01.000000 UTC - 2038-01-19 03:14:07.999999 UTC

UTC时间为全球统一协调时间,相当于一个全球标准时间,如果要换算成当地时间,需要加上当地的时区,比如咱们中国是东八区,则加8小时就可以啦

文本字符串类型

equation?tex=%5Cbegin%7Barray%7D%7Bc%7Cc%7D+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E7%B1%BB%E5%9E%8B%E5%90%8D%E7%A7%B0%7D%7D+%26+%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E8%AF%B4%E6%98%8E%7D%7D+%26%5Ccolor%7Bbrown%7D%7B%5Ctext%7B%E5%AD%98%E5%82%A8%E9%9C%80%E6%B1%82%7D%7D%5C%5C++%5Chline++CHAR%28M%29+%26+%E5%9B%BA%E5%AE%9A%E9%95%BF%E5%BA%A6%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+M%E5%AD%97%E8%8A%82%EF%BC%8C1%3C%3DM%3C%3D255%5C%5C++VARCHAR%28M%29+%26+%E5%8F%98%E9%95%BF%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+L%2B1%E5%AD%97%E8%8A%82%EF%BC%8C%E5%9C%A8%E6%AD%A4L%3C%3DM+%E5%92%8C+1%3C%3DM%3C%3D255%5C%5C+TINYTEXT+%26+%E9%9D%9E%E5%B8%B8%E5%B0%8F%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+L%2B1%E5%AD%97%E8%8A%82%EF%BC%8C%E5%9C%A8%E6%AD%A4L%3C2%5E8%5C%5C+TEXT+%26+%E5%B0%8F%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+L%2B2%E5%AD%97%E8%8A%82%EF%BC%8C%E5%9C%A8%E6%AD%A4L%3C2%5E16%5C%5C+MEDIUMTEXT+%26+%E4%B8%AD%E7%AD%89%E5%A4%A7%E5%B0%8F%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+L%2B3%E5%AD%97%E8%8A%82%EF%BC%8C%E5%9C%A8%E6%AD%A4L%3C2%5E24%5C%5C+LONGTEXT+%26+%E5%A4%A7%E7%9A%84%E5%AD%97%E7%AC%A6%E4%B8%B2+%26+L%2B4%E5%AD%97%E8%8A%82%EF%BC%8C%E5%9C%A8%E6%AD%A4L%3C2%5E32%5C%5C+ENUM+%26+%E6%9E%9A%E4%B8%BE%E7%B1%BB%E5%9E%8B+%26+1%E6%88%962%E4%B8%AA%E5%AD%97%E8%8A%82%EF%BC%8C%E5%8F%96%E5%86%B3%E4%BA%8E%E6%9E%9A%E4%B8%BE%E5%80%BC%E7%9A%84%E6%95%B0%E7%9B%AE%5C%5C+SET+%26+%E4%B8%80%E4%B8%AA%E8%AE%BE%E7%BD%AE+%26+1%EF%BC%8C2%EF%BC%8C3%EF%BC%8C4%E6%88%968%E4%B8%AA%E5%AD%97%E8%8A%82%5C%5C+%5Cend%7Barray%7D%5C%5C超过指定的字符串最大长度则不会插入,并报错

TEXT 用于存放文章,评论等

总结:以上就是MySQL常用的数据类型了,接下来我们再详细讲解开发当中最常用的一些类型

TINYINT

这个我们通常用来存一些状态值,或者 bool 类型的值,比如男女,是否,等等

INT 和 BIGINT

这个主要用作数据库的主键或者逻辑外键,通常建议使用 UNSIGIN 无符号的类型

FLOAT 和 DOUBLE

对于一般精度来讲,FLOAT 就足够了,不足的话 DOUBLE 来顶~ 如果是设计金融类容不得半点闪失的,最好使用 DECIMAL 类型

TIMESTAMP

我们每张表,最好都加一个 created_time和 updated_time 作为表的一个时间记录,在定位数据的新增和修改也很方便。这个时候就需要使用 TIMESTAMP 类型了,数据库统一存储 UTC 时间,查询的时候自动转为该时区的时间,不需要我们手动转换;示例如下

`created_time` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP

`updated_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE

VARCHAR(M)

在我们指定了表字符集为 UTF8MB4 时候,相应的字符串类型也会使用该类型,这是变长字符串类型,当你不确定你的字符串大小的时候,可以使用这个,M 指定为最多 M 个 字符,也就是说最多占用 M * 每个字符所占用的字节数,比 CHAR(M) 更节省空间

最后

以上就是对MySQL常用数据类型的总结,希望能对你的数据库学习之路带来帮助,下一节我们将会继续学习更高阶的查询语句,敬请期待~

说明:本文首发于知乎专栏,同步于 简书 以及 CSDN 等平台,转发必须注明出处,违规转载必究

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值