【MySQL】数据库知识突破:数据类型全解析与详解
前言:本节内容讲述MySQL的数据类型, 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作, 并没有对数据的内容进行操作,所以它叫做DDL。另外,还有许多其他的数据类型以及其中的细节我们并不清楚。 本节就是具体的对于MySQL中的数据类型进行一些列讲解。
ps:本节内容建议学习了建库和建表的友友们进行观看。
目录
数值类型
tinyint
bit类型
浮点类型
float
decimal
字符串类型
char
varchar
日期和事件类型
enum和set
enum
set
如何查找
数值类型
数值类型主要有tinyint(1字节)、smallint(2字节)、mediumint(3字节)、int(4字节)、bigint(8字节)等,这么多类型都叫做整数类型。其中如果不加unsigned默认为带符号的整形,, 带上unsigned叫做不带符号的整形类型。
tinyint
我们先在创建一个表, 这个表里面只有一个tinyint类型:
然后我们对立面进行插入:
我们插入之后就会发现,当我们插入-128可以, 插入-127也可以, 插入127也可以。 但是插入128就不行了, 插入-129就不行了。 并且报错说了超出范围。
然后创建一个无符号的tinyint类型, 然后我们再插入负数就不行了。 并且整数我们可以插入到了255。 负数和256以上都差入不了。
也就是说, 这个和我们的语言是不一样的。语言如果插入的太大, 语言就会帮助我们进行截断。但是mysql不能截断,该插入多少就是多少, 超过了这个范围就插入失败!!反过来, 如果我们已经有数据插入到了mysql中, 那么这个数据就一定是合法的。 所以,mysql中, 一般而言, 数据类型本身也是一种约束!!!就能保证数据库中的数据是可预期、合法的。
ps:smallint 、midumint、int类型和tinyint类似, 这里不做演示。
bit类型
bit类型,为类型。 使用的时候就是bit(M)。M指定位数, 默认为1, 范围是1 ~ 6。
我们创建一个bit类型, 大小为1,那么我们插入的时候, 特定字段就不能插入超过2。
浮点类型
float
float类型如何使用呢?
float[(m, d)]:这里面的m指定的是显示的长度, d指定的是小数的位数。整个float占用4个字节。
下面我们创建一个float类型的表, 来进行插入示范一下:
上面我们是创建一个4个位数, 然后小数点后面指定必须是2位。 然后也就是说整数部分一定只能是2位。
然后, 我们一开始就是正常插入99.99, 显然可以插入; float是有符号的,所以我们插入-99.99的时候也可以插入;如果我们的整数部分插入的时候不是两位而是大于两位, 999.99, 那么就不能插入, 因为规定了整数部分必须是两位。 即便是999.9也不可以, 因为整数部分必须是两位; 当小数部分插入的时候不是两位, 如果是小于两位就补零。 相当于插入99.9其实插入的是99.90;如果小数部分插入的时候大于两位, 那么就进行四舍五入, 比如99.994234324324, 那么对第二位的后一位进行四舍五入为99.99。 但是如果是99.995, 四舍五入为100.00所以就不行了。
ps: 那么对于有符号的float(4, 2)类型, 范围是(-99.99 ~ 99.99) 。 无符号是(0 ~ 99.99) ,这里不做讲解,自行验证。
现在我们使用一下float的默认的存储范围:
我们会发现,我们插入了一个很大的数字, 但是他只给我们存储了整数的部分, 并且整数的部分也不准, 也有精度损失。 所以我们就能观察到, 其实float是有精度损失的。
decimal
decimal也是浮点类型。 float如果存储的数字很大就不准了, 但是decimal不会。 decimal的用法和float类似, 也是decimal[m, d]:m指定长度, d指定小数部分的位数。
我们下面进行两者的对比:
我们的float和decimal都是用了(10, 8), 也就是两个整数位, 8个小数位。 然后插入相同的数据我们会发现两者的插入结果不一样。 其中float的类型插入的数据精度丢失, 而decimal的精度没有丢失。
字符串类型
char
char是固定长度字符串, L是可以存储的长度,单位为字符, 最大的长度可以为255。
我们创建的char(2), 意思就是创建的两个字符的类型。 然后我们插入一个'a', 可以插入; 插入'ab'可以插入; 插入'abc', 不可以插入了。 说明一个字符就是占用一个位。 char(2)就可以插入两个字符。 但是我们如果插入一个汉字”中', 可以插入, 为什么插入'中国'也可以插入呢?我们知道, 一个汉字在utf8中是3个字节。 所以,我们就可以推断, 在mysql中的一个字符, 不同于语言一个字符就是一个字节。 mysql的一个字符就是一个字符, 一个汉字也是一个字符!!
varchar
varchar是边长字符串。 他的最大长度是65535, 比char要大。
由上面的例子我们就可以看到, varchar类似于char, 也是一个汉字就是一个字符。 括号里是多少, 就是创建多少字符的类型。
现在,我们看一下下面这个:
我们创建一个65535大小的varchar类型,就会报错说类型太大了。 但是我们上面不是说varchar的类型最大时65535吗? 这里的65535是说的字节, 而不是字符个数。而字符数就是他说的这个16383。
另外 , 关于varchar(len), 这个len到底是多大, 和表的编码是相关的。 根据一个字符占多少来进行计算出来的。 比如utf8就是65535 / 3 = 21845, gb就是65535 / 2 = 32767. 在mysql8.0里面是utf8mb4, 和上面有不一样。 并且, 如果是char, 我们要len个字符, 就是给我们6个字符的空间。 但是对于varchar, 我们虽然要了len个字符, 但是如果实际中我们只是用了1个字符, 那么varchar就只会给我们1个字符的空间, 这个len对于varchar只是一个上限。
还有, varchar中其实有1 ~ 3个字节用于记录数据大小, 所以我们实际上varchar最大的字节数是65535 - 3。
然后char和varchar的优缺点就很容易看出来:
- varchar变长:效率低, 节省空间。
- char定长:效率高, 浪费空间。
日期和事件类型
date:日期,'yyyy-mm-dd'占3个字节。
datetime:日期和时间,'yyyy-mm-dd HH:ii:ss' 占8个字节。
timestamp:时间戳, 从1970年开始进行计算, 占用4个字节。
enum和set
enum
enum是枚举类型, 枚举类型是我们只能在枚举出来的选项中选择一个。 是多选一:
我们如果创建一个gender枚举男和女。 我们插入的时候如果插入男, 可以插入; 如果插入女, 也可以。 但是如果插入别的, 就不行了。
但是, 我们可以插入1和2:
这是因为在枚举中, 枚举变量的下标是从1开始的, 然后以此类推。 我们进行插入时, 也可以利用下标来代指枚举变量。
set
还是我们上面的t12这个表:
在插入的过程中, 我们有可能遇到这种情况, 就是我们一个人, 比如说赵六, 他既喜欢游泳, 又喜欢写代码。 那么怎么办呢? 这个就要用到集合:
所以, 我们插入集合的方法就是一个' ', 中间可以写集合里面的元素,中间用逗号分割。
另外, 我们如果想要让数字表示集合的元素。 规则和枚举不一样。 这里使用的是二进制来表示对应位置的元素有没有进行插入。 就比如我们上面创建的表, 我们的表的集合里面一共有四个元素。 如果全部插入就是1111(二进制); 如果是不插入游泳就是111; 如果插入不插入乒乓球, 就是1101; 如果不插入代码, 不插入羽毛球, 插入乒乓球和游泳就是1100。现在来测试:
如何查找
查找enum比较简单, 执行select where语句即可:
查找set, 假如我们想要查找只喜欢羽毛球的人容易查找, 直接select where:
但是如果我们想要的是喜欢羽毛球的人, 这些人也肯能喜欢乒乓球, 可能喜欢游泳啥的。 这个时候它们就不能被选到。所以这里就要用到一个函数find_in_set。 select 是可以执行函数的。 这个find_in_set的作用就是查找集合里面的某一个元素, 并且返回这个元素的下标。 如果返回0, 那么没有查找到:
——————以上就是本节全部内容哦, 如果对友友们有帮助的话可以关注博主, 方便学习更多知识哦!!!
相关文章:

【MySQL】数据库知识突破:数据类型全解析与详解
前言:本节内容讲述MySQL的数据类型, 我们在学习之前的建表的时候已经用过各种各样的数据类型。 比如int、varchar、char类型等等。其中它们是对表的结构的操作, 并没有对数据的内容进行操作,所以它叫做DDL。另外,还有…...
使用Golang实现开发中常用的【实例设计模式】
使用Golang实现开发中常用的【实例设计模式】 设计模式是解决常见问题的模板,可以帮助我们提升思维能力,编写更高效、可维护性更强的代码。 单例模式: 描述:确保一个类只有一个实例,并提供一个全局访问点。 优点&…...

【Java学习】电脑基础操作和编程环境配置
CMD 在Windows中用命令行的方式操作计算机。 打开CMD Win R输入CMD按下回车键 Win E 进入我的电脑 常用的CMD命令 盘符名称冒号 说明:盘符切换 举例:E:回车,表示切换到E盘 dir 说明:查看当前路径下的内容 cd目录 说明&a…...

AVL树解析
目录 一. AVL的概念 二 AVL树的插入 2.1先按二叉搜索树的规则插入 2.2 AVL的重点:平衡因子更新 3.1 更新后parent的平衡因子等于0。 3.2 更新后parent的平衡因子等于1 或 -1,需要继续往上更新。 3.3 更新后parent的平衡因子等于2 或 -2,需…...

栈和队列(Java)
一.栈(Stack) 1.定义 栈是限定仅在表尾进行插入或删除操作的线性表 一般的表尾称为栈顶 表头称为栈底 栈具有“后进先出”的特点 2.对栈的模拟 栈主要具有以下功能: push(Object item):将元素item压入栈顶。 pop()&am…...
C#设计原则
文章目录 项目地址一、开放封闭原则1.1 不好的版本1.2 将BankProcess的实现改为接口1.3 修改BankStuff类和IBankClient类二、依赖倒置原则2.1 高层不应该依赖于低层模块2.1.1 不好的例子2.1.2 修改:将各个国家的歌曲抽象2.2 抽象不应该依于细节2.2.1 不同的人开不同的车(接口…...

easyfs 简易文件系统
easyfs easyfs 简易文件系统文件系统虚拟文件系统 VFS简易文件系统 easyfs磁盘布局超级块 easyfs 文件系统结构磁盘上的索引结构索引节点Inode 和 DiskInode 之间的关系举例说明读取文件的过程( /hello ) 参考文档 easyfs 简易文件系统 文件系统 常规文…...
【架构论文-1】面向服务架构(SOA)
【摘要】 本文以我参加公司的“生产线数字孪生”项目为例,论述了“面向服务架构设计及其应用”。该项目的目标是构建某车企的数字孪生平台,在虚拟场景中能够仿真还原真实产线的动作和节拍,实现虚实联动,从而提前规避问题ÿ…...

刚刚!更新宁德时代社招Verify测评语言理解数字推理SHL题库、网盘资料、高分答案
宁德时代社招入职的Verify测评主要分为两大块:语言理解和数字推理。语言理解部分包括阅读理解、逻辑填空和语句排序,要求在17分钟内完成30题。数字推理部分包括数字序列、数学问题解决和图表分析,同样要求在17分钟内完成18题。这些测评题目旨…...

C++笔记---智能指针
1. 什么是智能指针 1.1 RALL设计思想 RAII(Resource Acquisition Is Initialization,资源获取即初始化)是一种资源管理类的设计思想,广泛应用于C等支持对象导向编程的语言中。它的核心思想是将资源的管理与对象的生命周期紧密绑定…...
CentOS 7系统中更改YUM源为阿里云的镜像源
引言 更换阿里的镜像源可以带来诸多好处,包括提高下载速度、提升稳定性、同步更新、简化配置、节省带宽资源以及增强系统安全性等。因此,对于使用CentOS系统的用户来说,更换阿里的镜像源是一个值得考虑的选择。 1.备份yum源 mv /etc/yum.r…...

Python酷库之旅-第三方库Pandas(206)
目录 一、用法精讲 961、pandas.IntervalIndex.mid属性 961-1、语法 961-2、参数 961-3、功能 961-4、返回值 961-5、说明 961-6、用法 961-6-1、数据准备 961-6-2、代码示例 961-6-3、结果输出 962、pandas.IntervalIndex.length属性 962-1、语法 962-2、参数 …...

3.4CQU数学实验???
meshgrid 是一个用于生成网格点坐标的函数。它常用于在二维或三维空间中创建坐标网格,用于可视化和数据处理。 在二维情况下,meshgrid 函数接受两个一维数组作为输入,并返回两个二维数组,这两个数组中的元素分别表示了所有可能的…...

Linux(CentOS)开放端口/关闭端口
一、普通用户使用 sudo 操作,开放/关闭端口,80 1、检查端口是否开放 sudo firewall-cmd --zonepublic --query-port80/tcp 2、开放端口 sudo firewall-cmd --zonepublic --add-port80/tcp --permanent 3、重新加载(开放或关闭端口后都需…...
GreenDao适配AGP8.7+
升级配置 工具版本Android StudioLadybug 2024.2.1 Path2AGP8.7.2KPG1.8.21GGP3.3.1明细 classpath "com.android.tools.build:gradle:$agp_version"classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kgp_version"classpath "org.greenrobot:g…...
【前端】Typescript从入门到进阶
以下是 TypeScript 的常用知识点总结,涵盖了从基础到入门的内容,并配有代码示例: 1. TypeScript 基础 1.1 安装和配置 安装 TypeScript 并初始化配置文件: npm install -g typescript tsc --init 1.2 基本类型 TypeScript 提供…...

在 RHEL 8 | CentOS Linux release 8.5.2111上安装 Zabbix 6
1. 备份YUM源文件 cd /etc/yum.repos.d/ mkdir bak mv C* ./bak/ wget -O /etc/yum.repos.d/CentOS-Linux-BaseOS.repo https://mirrors.aliyun.com/repo/Centos-vault-8.5.2111.repo yum clean all yum makecache2. 将 SELinux 设置为宽容模式,如下所示。 sudo s…...
光纤HDMI线怎么连接回音壁?
第一步:准备HDMI线、光纤线(TOSLINK线)、视频源设备、回音壁 第二步:连接HDMI线,找到视频源设备上的HDMI输出口,将HDMI线的一端插入这个接口,再把HDMI线的另一端插入回音壁的HDMI输入口。注意检…...
屏幕后期处理
1、屏幕后期处理效果 屏幕后期处理效果( Screen Post-Processing Effects)是一种在渲染管线的最后阶段应用的视觉效果,允许在场景渲染完成后对最终图像进行各种调整和效果处理,从而增强视觉体验 常见的屏幕后期处理效果有&#x…...
K8资源之endpoint资源EP资源
1 endpoint资源概述 endpoint资源在K8S中用来表s示vc与后端 Pod 之间的连接关系的对象。当创建svc时,svc根据标签是否相同或svc名字是否和ep名字相同,把svc和ip关联上。 删除svc时,会自动的删除同名的ep资源。 2 ep资源和svc的关联测试 […...
【SpringBoot】100、SpringBoot中使用自定义注解+AOP实现参数自动解密
在实际项目中,用户注册、登录、修改密码等操作,都涉及到参数传输安全问题。所以我们需要在前端对账户、密码等敏感信息加密传输,在后端接收到数据后能自动解密。 1、引入依赖 <dependency><groupId>org.springframework.boot</groupId><artifactId...

Linux-07 ubuntu 的 chrome 启动不了
文章目录 问题原因解决步骤一、卸载旧版chrome二、重新安装chorme三、启动不了,报错如下四、启动不了,解决如下 总结 问题原因 在应用中可以看到chrome,但是打不开(说明:原来的ubuntu系统出问题了,这个是备用的硬盘&a…...

有限自动机到正规文法转换器v1.0
1 项目简介 这是一个功能强大的有限自动机(Finite Automaton, FA)到正规文法(Regular Grammar)转换器,它配备了一个直观且完整的图形用户界面,使用户能够轻松地进行操作和观察。该程序基于编译原理中的经典…...
在QWebEngineView上实现鼠标、触摸等事件捕获的解决方案
这个问题我看其他博主也写了,要么要会员、要么写的乱七八糟。这里我整理一下,把问题说清楚并且给出代码,拿去用就行,照着葫芦画瓢。 问题 在继承QWebEngineView后,重写mousePressEvent或event函数无法捕获鼠标按下事…...

mac 安装homebrew (nvm 及git)
mac 安装nvm 及git 万恶之源 mac 安装这些东西离不开Xcode。及homebrew 一、先说安装git步骤 通用: 方法一:使用 Homebrew 安装 Git(推荐) 步骤如下:打开终端(Terminal.app) 1.安装 Homebrew…...
快刀集(1): 一刀斩断视频片头广告
一刀流:用一个简单脚本,秒杀视频片头广告,还你清爽观影体验。 1. 引子 作为一个爱生活、爱学习、爱收藏高清资源的老码农,平时写代码之余看看电影、补补片,是再正常不过的事。 电影嘛,要沉浸,…...

springboot 日志类切面,接口成功记录日志,失败不记录
springboot 日志类切面,接口成功记录日志,失败不记录 自定义一个注解方法 import java.lang.annotation.ElementType; import java.lang.annotation.Retention; import java.lang.annotation.RetentionPolicy; import java.lang.annotation.Target;/***…...

【Linux】Linux安装并配置RabbitMQ
目录 1. 安装 Erlang 2. 安装 RabbitMQ 2.1.添加 RabbitMQ 仓库 2.2.安装 RabbitMQ 3.配置 3.1.启动和管理服务 4. 访问管理界面 5.安装问题 6.修改密码 7.修改端口 7.1.找到文件 7.2.修改文件 1. 安装 Erlang 由于 RabbitMQ 是用 Erlang 编写的,需要先安…...
第八部分:阶段项目 6:构建 React 前端应用
现在,是时候将你学到的 React 基础知识付诸实践,构建一个简单的前端应用来模拟与后端 API 的交互了。在这个阶段,你可以先使用模拟数据,或者如果你的后端 API(阶段项目 5)已经搭建好,可以直接连…...

PH热榜 | 2025-06-08
1. Thiings 标语:一套超过1900个免费AI生成的3D图标集合 介绍:Thiings是一个不断扩展的免费AI生成3D图标库,目前已有超过1900个图标。你可以按照主题浏览,生成自己的图标,或者下载整个图标集。所有图标都可以在个人或…...