博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
MySQL 数据类型
阅读量:6829 次
发布时间:2019-06-26

本文共 3960 字,大约阅读时间需要 13 分钟。

MySQL 支持多种类型,大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1.数值类型

类型         	大小                             	范围(有符号)                                 	范围(无符号)                                 	用途        TINYINT    	1 字节                           	(-128,127)                              	(0,255)                                 	小整数值      SMALLINT   	2 字节                           	(-32 768,32 767)                        	(0,65 535)                              	大整数值      MEDIUMINT  	3 字节                           	(-8 388 608,8 388 607)                  	(0,16 777 215)                          	大整数值      INT或INTEGER	4 字节                           	(-2 147 483 648,2 147 483 647)          	(0,4 294 967 295)                       	大整数值      BIGINT     	8 字节                           	(-9 233 372 036 854 775 808,9 223 372 036 854 775 807)	(0,18 446 744 073 709 551 615)          	极大整数值     FLOAT      	4 字节                           	(-3.402 823 466 E+38,-1.175 494 351 E-38),0,(1.175 494 351 E-38,3.402 823 466 351 E+38)	0,(1.175 494 351 E-38,3.402 823 466 E+38)	单精度浮点数值   DOUBLE     	8 字节                           	(-1.797 693 134 862 315 7 E+308,-2.225 073 858 507 201 4 E-308),0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)	0,(2.225 073 858 507 201 4 E-308,1.797 693 134 862 315 7 E+308)	双精度 浮点数值  DECIMAL    	对DECIMAL(M,D) ,如果M>D,为M+2否则为D+2	依赖于M和D的值                                	依赖于M和D的值                                	小数值     复制代码

2.日期和时间类型

类型       	大小 (字节)	范围                                      	格式                 	用途            DATE     	3      	1000-01-01/9999-12-31                   	YYYY-MM-DD         	日期值           TIME     	3      	'-838:59:59'/'838:59:59'                	HH:MM:SS           	时间值或持续时间      YEAR     	1      	1901/2155                               	YYYY               	年份值           DATETIME 	8      	1000-01-01 00:00:00/9999-12-31 23:59:59 	YYYY-MM-DD HH:MM:SS	混合日期和时间值      TIMESTAMP	4      	1970-01-01 00:00:00/2038结束时间是第 2147483647 秒,北京时间 2038-1-19 11:14:07,格林尼治时间 2038年1月19日 凌晨 03:14:07	YYYYMMDD HHMMSS    	混合日期和时间值,时间戳复制代码

3.字符串类型

类型        	大小               	用途                  CHAR      	0-255字节          	定长字符串               VARCHAR   	0-65535 字节       	变长字符串               TINYBLOB  	0-255字节          	不超过 255 个字符的二进制字符串  TINYTEXT  	0-255字节          	短文本字符串              BLOB      	0-65 535字节       	二进制形式的长文本数据         TEXT      	0-65 535字节       	长文本数据               MEDIUMBLOB	0-16 777 215字节   	二进制形式的中等长度文本数据      MEDIUMTEXT	0-16 777 215字节   	中等长度文本数据            LONGBLOB  	0-4 294 967 295字节	二进制形式的极大文本数据        LONGTEXT  	0-4 294 967 295字节	极大文本数据           复制代码

4.varchar 与 char 的区别

  • varchar 与 char 的区别,char 是一种固定长度的类型,varchar 则是一种可变长度的类型。
  • varchar(50) 中 50 的涵义最多存放 50 个字符。varchar(50) 和 (200) 存储 hello 所占空间一样,但后者在排序时会消耗更多内存,因为 ORDER BY col 采用 fixed_length 计算 col 长度(memory引擎也一样)。

所以,实际场景下,选择合适的 varchar 长度还是有必要的。

5.int(11) 中的 11 代表什么涵义?

int(11) 中的 11 ,不影响字段存储的范围,只影响展示效果。

MySQL还支持选择在该类型关键字后面的括号内指定整数值的显示宽度(例如,INT(4))。该可选显示宽度规定用于显示宽度小于指定的列宽度的值时从左侧填满宽度。显示宽度并不限制可以在列内保存的值的范围,也不限制超过列的指定宽度的值的显示。

6.金额(金钱)相关的数据,选择什么数据类型?

  • 方式一,使用 int 或者 bigint 类型。如果需要存储到分的维度,需要 *100 进行放大。
  • 方式二,使用 decimal 类型,避免精度丢失。如果使用 Java 语言时,需要使用 BigDecimal 进行对应。

7.主键自增

一张表,里面有 ID 自增主键,当 insert 了 17 条记录之后,删除了第 15,16,17 条记录,再把 MySQL 重启,再 insert 一条记录,这条记录的 ID 是 18 还是 15?

  • 一般情况下,我们创建的表的类型是 InnoDB ,如果新增一条记录(不重启 MySQL 的情况下),这条记录的 ID 是18 ;但是如果重启 MySQL 的话,这条记录的 ID 是 15 。因为 InnoDB 表只把自增主键的最大 ID 记录到内存中,所以重启数据库或者对表 OPTIMIZE 操作,都会使最大 ID 丢失。
  • 但是,如果我们使用表的类型是 MyISAM ,那么这条记录的 ID 就是 18 。因为 MyISAM 表会把自增主键的最大 ID 记录到数据文件里面,重启 MYSQL 后,自增主键的最大 ID 也不会丢失。

最后,还可以跟面试官装个 x ,生产数据,不建议进行物理删除记录。

8.大字段是否应该拆分

表中有大字段 X(例如:text 类型),且字段 X 不会经常更新,以读为为主,请问您是选择拆成子表,还是继续放一起?写出您这样选择的理由

  • 拆带来的问题:连接消耗 + 存储拆分空间。

    如果能容忍拆分带来的空间问题,拆的话最好和经常要查询的表的主键在物理结构上放置在一起(分区) 顺序 IO ,减少连接消耗,最后这是一个文本列再加上一个全文索引来尽量抵消连接消耗。

  • 不拆可能带来的问题:查询性能。

    如果能容忍不拆分带来的查询性能损失的话,上面的方案在某个极致条件下肯定会出现问题,那么不拆就是最好的选择。

实际场景下,例如说商品表数据量比较大的情况下,会将商品描述单独存储到一个表中。即,使用拆的方案。

转载于:https://juejin.im/post/5c34103de51d45527201688e

你可能感兴趣的文章
面向对象的开山鼻祖——“Jolt大奖精选丛书”有奖征文
查看>>
C语言例题系列------第十一天
查看>>
卖了,珠海
查看>>
对抗海量表格数据,【华为2012实验室】没有选择复仇者联盟
查看>>
Centos安装VMware
查看>>
arp欺骗
查看>>
不可不知 DDoS的***原理与防御方法
查看>>
SVN基于MySQL认证
查看>>
window.location.hash的简单了解
查看>>
BigEndian和LittleEndian
查看>>
redhat5下安装MySQL-5.6,默认密码无法进入的解决办法
查看>>
七、Asp.Net MVC4.0开发CMS系统案例之用户群组模块
查看>>
为什么一般的性能测试要在局域进行?
查看>>
CCNP学习之路之单臂路由router-on-a-stick
查看>>
Linux ---算术运算
查看>>
Linux下静态路由配置命令
查看>>
xpath中的ends-with无效解决方案
查看>>
ubuntu12.04 右上角网络图标消失问题
查看>>
用innotop监测mysql
查看>>
axure rp 7.0软件汉化翻译(不断更新中)
查看>>