mysql8.0.19基础数据类型详解

  

  

mysql常用数据类型概览

        ! [1036857-20170801181433755-146301178](D: \笔记\ mysql \复习\ 1036857 - 1036857 - 146301178. - png) 1。数字:   整型:tinyinit int bigint   小数:   浮:在位数比较短的情况下不精准   双:在位数比较长的情况下不精准   0.000001230123123123   存成:0.000001230000      十进制:(如果用小数,则用推荐使用十进制)   精准   内部原理是以字符串形式去存      2. 字符串:   char(10):简单粗暴,浪费空间,存取速度快   根存成root000000   varchar:精准,节省空间,存取速度慢      sql优化:创建表时,定长的类型往前放,变长的往后放   比如性别比如地址或描述信息      在255个字符,超了就把文件路径存放到数据库中。   比如图片,视频等找一个文件服务器、数据库中只存路径或url。      3.时间类型:   最常用:datetime      4. 枚举类型与集合类型      

  

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img - haixwm9z - 1585063057990) (D: \笔记\ mysql \复习\ 1036857 - 1036857 - 146301178. - png)]

  

  
      <李>整数类型:非常小的整数,短整型,MEDIUMINT, INT, BIGINT李   <李>作用:存储年龄,等级,id,各种号码等李   
        整型类型测试   默认是有符号的   mysql>非常小的整数创建表t1(钱);#注意,创建表时最后一个字段后面不能有逗号,错误写法mysql>创建表t1(钱非常小的整数,);      mysql>插入t1值(11);   查询好了,1行影响(0.28秒)      mysql>select * from t1;      mysql>插入t1值(-10);   查询好了,1行影响(0.11秒)      mysql>select * from t1;      mysql>插入t1值(-200);   查询好了,1行受影响,警告(0.10秒)      mysql>select * from t1;      设置了数据类型,会有一个约束效果,只能表示自己范围内的数      创建无符号数值类型的写法:   mysql>创建表t2 (id非常小的整数无符号);      

  
      <李>浮点类型:浮动双李   <李>作用:存储薪资,身高,温度,体重,体质参数等李   
        测试   mysql>创建表t3 (id(60, 30)浮动);# 60代表小数位+整数位总数   查询好,影响(1.70秒)# 30 0行表示小数位最高30位      mysql>创建表t4 (id双(30 60岁));   查询好,0行影响(0.88秒)      mysql>创建表t5 (id小数(30 60岁));#小数能够存储精确值的原因在于其内部按照字符串存储。   查询好,0行影响(0.96秒)      mysql>插入t3值(1.1111111111111111111111);   查询好了,1行影响(0.13秒)      mysql>插入t4值(1.1111111111111111111111);   查询好了,1行影响(0.22秒)      mysql>插入t5值(1.1111111111111111111111);   查询好了,1行影响(0.09秒)      mysql>select * t3;   mysql>select * from t4;   mysql>从t5 select *;   之前            1 .创建表   创建表t2 (f1浮(5,2),f2浮动,f3双(5,2),f4双);      浮动(5,2)保留两位小数并且四舍五入   双(5,2)   2 .写入数据   插入t2值(5.2336,5.2336,5.336,5.2336);   3 .查看表中数据   选择从t2 *;   4 .指定写入数据   插入t2 (f2, f4)值(5.1783682169875975,5.1783682169875975);      插入表名(字段1,字段3)值(值1,值3);      1 .创建t3表   创建表t3 (f1浮,d1双,d2小数(30日20),d3十进制);   2 .查看表结构   desc t3;   3 .写入数据   插入t3值(5.1783682169875975179,5.1783682169875975179,5.1783682169875975179,5.1783682169875975179);      int - - - - - - - - - -不约束长度,最多表示10位数      浮动(m, n) m - - - - - -一共多少位n - - - - - -小数部分多少位      

  
      <李>类型:日期、时间、DATETIME, IMESTAMP,年李   <李>作用:存储用户注册时间,文章发布时间,员工入职时间,出生时间,过期时间等李   
        mysql>创建表t6 (d1, d2日期、d3 datetime);   查询好,0行影响(1.75秒)      mysql>插入t6值(现在现在(),(),());   查询好了,1行受影响,警告(0.12秒)      mysql>select * from t6;      

        char和varchar性能对比:   以char(5)和varchar(5)来比较,加入我要存三个人名:某人,ssb1 ssbb2   字符:   优点:简单粗暴,不管你是多长的数据,我就按照规定的长度来存,5个5个的存,三个人名就会类似这种存储:某人ssb1 ssbb2,中间是空格补全,取数据的时候5个5个的取,简单粗暴速度快   缺点:貌似浪费空间,并且我们将来存储的数据的长度可能会参差不齐      varchar:   varchar类型不定长存储数据,更为精简和节省空间   例如存上面三个人名的时候类似于是这样的:sbssb1ssbb2,连着的,如果这样存,请问这三个人名你还怎么取出来,你知道取多长能取出第一个吗?      varchar在存数据的时候,会在每个数据前面加上一个头,这个头是1 - 2个字节的数据,这个数据指的是后面跟着的这个数据的长度,1字节能表示2 * * 8=256,两个字节表示2 * * 16=65536,能表示0 - 65535的数字,所以varchar在存储的时候是这样的:1字节+某人+ 1字节+ + ssbb2 ssb1 + 1字节,所以存的时候会比较麻烦,导致效率比char慢,取的时候也慢,先拿长度,再取数据。      优点:节省了一些硬盘空间,一个acsii码的字符用一个字节长度就能表示,但是也并不一定比char省,看一下官网给出的一个表格对比数据,当你存的数据正好是你规定的字段长度的时候,varchar反而占用的空间比char要多。      值字符(4)存储所需的varchar(4)存储要求   “‘4字节”1个字节   “ab”“ab”4个字节“ab”3个字节   “abcd”“abcd”4个字节的abcd 5字节   “abcdefgh”“abcd”4个字节的abcd 5字节      缺点:存取速度都慢      对于InnoDB数据表,内部的行存储格式没有区分固定长度和可变长度列(所有数据行都使用指向数据列值的头指针),因此在本质上,使用固定长度的CHAR列不一定比使用可变长度VARCHAR列性能要好。因而,主要的性能因素是数据行使用的存储总量。由于CHAR平均占用的空间多于VARCHAR,因此使用VARCHAR来最小化需要处理的数据行的存储总量和磁盘I/O是比较好的。

mysql8.0.19基础数据类型详解