首页 > 数据库 >8、MySQL数据表基本数据类型

8、MySQL数据表基本数据类型

时间:2023-08-02 14:55:23浏览次数:37  
标签:10 varchar 是不是 数据类型 char 数据表 MySQL 类型 小数

数字

整数

还有其他的数据类型,分成了几种: 1、数字类型 2、字符串类型 3、时间类型 总共可以分成这么几类,咱们的数字里面有个int,除了int还有什么呢,还有tinyint、bigint,它们都是int,它们之间的区别是什么,它是不是能表示的数据范围是不一样的。 比如对于tinyint,它只能表示有符号的-128-127或者是无符号的0-255。 int比它表示的范围更大一点,但是这个条件是是否有符号的,是否有符号怎么做呢,你就是在创建这个类型的时候,比如int unsigned,加上它就表示无符号了,无符号的int表示的是0-4294967295,如果是有符号的,就是int signed,表示有符号的,有符号的范围是-2147483648-2147483647,有负的有正的。 bigint它所指的范围更大一些。 所以在咱们的整数类型里用这几个是不是都表示数字,只不过长短不一样,什么时候用什么,就得看你用这个表存什么数据,如果你存的数据特别少,那你说用int好,还是用tinyint好,tinyint,这得根据咱们的业务或者根据咱们的场景不同来给它做不同的选择。  

小数

数字类型几个里面还有float、double、decimal,这几个表示小数,但是一旦涉及到float或者double,这表示浮点型,这种东西只能表示不太精准的小数,因为如果你设置成这种类型,它本来就叫浮点型,或者叫双精度类型,它本来就是表示小数的,但是如果一旦你的小数的范围比如说你写上一个0.00000100000123000123001230123,就是你这个数的位数越多,它所表示的越不精准,比如可能你要去插的是这条数据,那真正如果你的类型等于float,那你再插进去,可能就变成0.0000010000012300000000这样了,它是不准确的,所有的,甭管你用c语言,还是用python,但凡涉及到float或者是double类型的,就是设置的是小数,但是是不精准的小数,对于double和float什么区别呢,float是在特别短的位数就开始不精准了,double是你的位数比原来更长的时候就开始不精准了,它们俩就相当于50步笑百步,小数对于那些不太精准的,或者是长度不是特别大的,我们可以选择float跟double,但是如果一旦我们真的要存储很长或者是小数位特别多,或者位数特别多的,用它们就不准确,这玩意以后我们存东西的时候,是不是就是永远不准确了吗难道,用这两个就不准确了。    
decimal[(m[,d])] [unsigned] [zerofill]

 

还有一个准确的叫decimal,这个叫十进制小数,但是这个小数永远是精准的,因为decimal内部存储的时候,存储特别长数字的时候,它不是按数字存的,它按字符串存的,就是它的内部底层原理是按字符串存的,而我们去查询的时候感知它的时候还是数字类型的,所以你用小数的时候,推荐你用decimal。   如num decimal(10,5) 它里面可以写2个值: 第一个值10表示总位数,表示小数点前面和小数点后面加起来支持的总位数 后面紧接着还有一个d,它的值是5,这是它小数点后最多可以有几位,这样咱们这个decimal所表示的范围是不是我们给它定了,就是前面5个,后面5个,这是咱们用decimal的时候是这么一个区别。   接下来咱们继续往下,既然有数字这么一类分成整数类和小数类,接下来还有没有其他的呀,还有字符串类。  

字符串

字符串类分成几种,叫char、varchar,它们俩都是表示字符串类型,并且它们后面都需要加一个长度,你去使用的时候,它们2个是一样的,它们2个都是用来存字符串,长度是不是都是10个字符,在咱们看来是一样,其实本质上是不一样的。 比如我们用char(10),存上一个root,它只有4个字节,没有占满,如果是char的话,它自己就会在没有占满的位置去给我填充空的东西,比如6个空行,它就会在这帮你去做这样的填充,也就是说我是不是认为写上10,甭管你长度等不等于10,我都占10个位置。 varchar是最多能占10个,如果你存了一个root,它在内存里面,或者在硬盘里面,它存储的时候仅占4个位置,那6个空行是不会增加的。 这2个哪种好? 有同学说varchar好,因为varchar节省空间,但是真正查的时候,它的速度没有char快,为什么呢,各位,你们这样来想。

 

咱们在数据库里面假设是这样的,如果说我规定了红框里这3个位置的长度,以后我去查询的时候。 select name,age from tb1; 它是不是得从前到后帮我去找。找到name是不是就是root这个长度就给它拿回来了,中间这个值如果也给它规定都是char类型,是不是我就知道我跳过几个数据,直接去后面拿就行了。假设我跳过10个位置,把后面的18拿过来,这样的话找到自己root,再跳多少个位置把18找回来,这是char的时候你直接跳过去找了,也知道跳多少,如果是varchar的话,这玩意都没准了。

 

有的是保存的这个长度,有的是保存的这个长度,你说找到root,你应该往后面跳多少个位置,不知道,所以得往后遍历,一个个找,直到找到说应该跳了,然后再找后面那个。 char速度比较快 varchar能够节省空间   鉴于这一个速度比较快,以后给大家一个sql优化的方向,以后把定长(长度一定的)的数据类型往前放,把变长的往后放。 varchar(10)这个数据是不是变长的,有些占6个位置,有些占4个位置,有些占5个位置。 以后创建数据表时把定长的列往前放  

 

以后假设我做的是它的话,varchar的话我是不是可以把数字放在前面,把定长(年龄)放前面,变长放最后了,相对来说以后咱们找name和age的时候是不是还是找这么一个范围,相对来说会快一些。这是以后sql优化的一个手段。 以后咱们再去创建数据库数据的时候,如果是定长的,就给它规定死了,比如你这里面要让用户填手机号,这手机号的长度能不能规定死了,能,一定要用char,因为char的速度快,并且长度也是定死了的。 如果遇到没法搞的,比如地址,每个人的地址都不一样,所以那时候逼不得已再用varchar,如果真的照这一地步,是不是把varchar放在列的最后面,变长的是不是都放后面。 这2种字符串的长度有限制,char和varchar最高都是255个,如果大于255个字符用text存储,比text大的有mediumtext,比它还大的是longtext,如果比longtext还大的,就不要在数据库存了,就以文件的形式写在你的硬盘上,然后把那个文件的路径放到数据库。大于longtext的数据存到数据库会非常慢,会增加它的压力,影响数据库的读取速度。  

上传文件

我要上传文件的话,或者上传图片,这个图片能不能存到数据库里面,能存,但是不要这样做,因为你把文件打开之后,读文件可能是以二进制的形式,mysql还支持二进制的形式,你是不是把你二进制的数据写到数据库,以后以二进制的数据再读回来,读回来你拿到一个文件或者图片,这个图片是不是称为是静态文件,这个图片让用户显示,你是不是还得读出来再给用户,非常麻烦,一般情况下不管你上传图片、文件还是你的视频等等之类的。 你只要给我上传,我会给你写到硬盘上,或者写到某个服务器的硬盘上,就是以文件的形式放在那,放在那就把这个文件的路径,在硬盘上的路径放到数据库,所以如果是上传文件,数据库里不要存文件,存文件所在服务器里的路径,以后想要拿,我把路径给你,你去服务器上只要一访问是不是就可以了,之后咱们在公司,或者是咱们以后做这种文件的时候,一般公司都会有文件服务器,把文件都会放在那一台服务器上,你只要存url就是那个路径就可以了。 文件存硬盘,数据库里存路径  

时间类型

还有时间类型,这个有几种呢,有date、time、year、datetime、timestamp,它们的区别是存的格式不一样。 date只有年月日,time只有时分秒,看你各种各样的应用场景,year只有年,datetime是年月日时分秒,timestamp也是年月日时分秒,但和datetime格式不一样。 我们最常用的就是datetime,因为咱们存时间都要把年月日时分秒存下来  

二进制类型

还有二进制类型,如tinyblob、blob、mediumblob、longblob,二进制类型存的时候就是二进制的数据了,这个不常用,知道它就可以了    

枚举

选项固定,不常修改的用枚举

 

还有2个类型也不常用,但是也得知道,第一个是枚举,比如你现在要往某个表里面插数据,插数据的时候假设是什么呢,就是你要买T恤,T恤是不是就有颜色,颜色我能不能规定了这一类T恤的颜色只有红黄绿行不行,可以,以后工厂生产了一个,我是不是就要在数据库记录一下已经有一件T恤了对不对,然后同学们那个颜色是不是得给它写上,但是这个颜色我们自己可以写,比如写上个红色、黄色、绿色,是不是只能挑这里面的一种放进来,你再弄一件粉色,不行,因为我说过这里面是不是总共有3个,咱们那个T恤是不是只生产3个,3种类型,所以在这各位,我这个列举的不是颜色,而是size是大小,enum里写了5个选项,你写了这5个选项之后,以后用户再来往里面插数据的时候,只能选择这5个里的其中一个。  

 

 

所以如果我们拿到它,也就是以后再来插入的时候,这个size这一列,size的值只能选择5个当中的一个,所以相当于我们给它规定了一个选项,只能有这么几个,那这一类东西,这种类型选中之后只能拿它其中的一个,这叫枚举。 在python里面没有这个概念,在其他语言里面就是那种基本数据类型里面其实也会有枚举类型,在这你就知道,这叫枚举,有个别名,能理解吗,也就是说你给它写出这么几个,以后就在这么几个里面用就可以了。  

 

有没有什么情况是2个选择合起来用,刚才枚举类型只能拿一个,还有一种特殊的数据类型叫set集合,但是这个集合和python基本数据类型里的集合不太一样,这个集合的意思是当咱们去创建了一张表,这张表里面假设也有一个name,但是这里面还多了一个col这个列,这个列后面写的是set("a","b","c","d"),如果是set,我们接下来能不能往里面给它插入数据呀,可以。  

 

我们要想给它插入数据的时候,这个values第一个红框的值给name,第二个红框的值给set,第二个红框的值也有约束,这个值只能填abcd它们的任意组合,可以插1个或多个

 

 

 

任意组合成一个放进去,能不能出现e,不能,因为我规定好了只能有这么几个 枚举和集合类型知道就可以了,相对来说set用的是非常少,几乎没怎么用过,但是这个枚举是会用到的,这是咱们说的基本数据类型里面大概就有这么几种。 这几种都要背会,要记住 尤其要记住char和varchar的区别,因为以后你去面试的时候你的笔试题里面一定不出意外可能会出现,之前有同学面试的时候出现了,这里面的原理是什么,还有一个写精确的小数用什么来着decimal,可以指定精度,总长度和小数位长度都能指定

标签:10,varchar,是不是,数据类型,char,数据表,MySQL,类型,小数
From: https://www.cnblogs.com/z-x-y/p/17600653.html

相关文章

  • mysql添加用户并分配权限
    CREATEUSER'username'@'ip'IDENTIFIEDBY'password';GRANTprivilegesONdatabase.tableTO'username'@'ip';其中:username替换为用户名,例如“bigman”ip替换为可访问数据库的ip,例如“127.0.0.1”“192.168.1.1”,使用“%”表示不限制远程连接ippassw......
  • 【MySQL技术专题】「问题实战系列」深入探索和分析MySQL数据库的数据备份和恢复实战开
    项目目标本次技术调研和分析报告,主要面向于总体分析和建立对应的MySQL数据库所需要从5.7版本升级到8.0版本后的Java应用服务项目的调整以及功能变动报告分析。MySQL8.0引入一些性能改进,例如新的查询优化器和索引算法。升级后,可以通过重新评估和优化项目中的SQL查询和索引来利用新......
  • MYSQL启动的参数
    MYSQL启动的参数--basedir=/usr/local/mysql--datadir=/usr/local/mysql/data--plugin-dir=/usr/local/mysql/lib/plugin--user=mysql--log-error=/usr/local/mysql/log/mysqld_error.log--pid-file=/usr/local/mysql/data/mysqld.pid 启动参数可以组合使用,如下/usr/local/my......
  • mysql在执行innobackupex增量备份时报错cannot open *****/xtrabackup_checkpoints
    问题描述:mysql在执行innobackupex增量备份时报错cannotopen*****/xtrabackup_checkpoints,如下所示:数据库:mysql5.7.21说明:此次测试环境为从节点.1、异常重现[mysql@mysql-leo-perslave~]$/usr/bin/innobackupex--defaults-file=/home/mysql/etc/my.cnf--socket=/mysql/da......
  • MySQL8_SQL语法
    MySQL8_SQL语法SQL全称StructuredQueryLanguage,结构化查询语言。操作关系型数据库的编程语言,定义了一套操作关系型数据库统一标准。 一、SQL通用语法在学习具体的SQL语句之前,先来了解一下SQL语言的同于语法。1).SQL语句可以单行或多行书写,以分号结尾。2).SQL语句可......
  • 因MySQL数据库无法启动导致LiteCVR视频平台也无法启动的问题解决教程
    近期呢,我们的数据人员发现有时候MySQL数据库无法启动会导致LiteCVR视频平台也无法启动,所以接下来我们将为大家讲解遇见这种问题时的解决教程。但是在这之前值得一提的一件事那就是我们的LiteCVR平台默认的数据库是SQLite,不过用户可以根据自己的使用需求选择将数据库切换为MySQL。具......
  • .NET+MySQL的坑
    #JSON字段访问时,引号格式--需要替换C#里的""\""""为"\""--C#里的SQL代码rtrim(ltrim(REPLACE(JSON_EXTRACT(b.yarn_type_id,'$.dye_name'),""\"""",'')))--MySQL直接执行的代码rtri......
  • 火山引擎ByteHouse:云原生数据库如何提升MySQL兼容性?
    更多技术交流、求职机会,欢迎关注字节跳动数据平台微信公众号,回复【1】进入官方交流群当前各类软件层出不穷,单独某一款软件往往难以满足企业应用需求,一般都需要与各类软件组合使用,这时软件生态兼容性就显得格外重要。作为关系数据库管理系统的代表之一,MySQL支持大多数操作系统、编程......
  • 求和计算MySQL中如何对两列求和(mysql 中两列总和)
    求和计算:MySQL中如何对两列求和?在MySQL数据库中,对两列进行求和运算是一项常规操作。本文将介绍在MySQL中如何对两列进行求和运算,并给出相关的SQL代码示例。SQL语句中使用的SUM()函数是MySQL中常用的聚合函数之一,用于计算某一列的总和。而对于两列的求和,则需要将两个......
  • MySQL计算两个日期的相差天数
    1.利用TO_DAYS函数selectto_days(now())-to_days('20120512')2.利用DATEDIFF函数selectdatediff(now(),'20120512')TIMESTAMPDIFF函数可用于计算两日期时间之间相差的天数,秒数,分钟数,周数,小时数语法:TIMESTAMPDIFF(unit,datetime_expr1,datetime_expr2)unit单位有如下几种:FRAC_SE......