Linux下学【MySQL】所有常用类型详解( 配实操图 通俗易懂 )

在这里插入图片描述
每日激励:“当你觉得你会幸运时,幸运就会眷顾你,所以努力吧,只要你把事情做好,并觉得你会幸运,你将会变得幸运且充实。”

绪论​:
本章继续学习MySQL的知识,本章主要讲到mysql中的所有类型(本篇原本是之前出的,结果写了忘记发了,存到了现在抱歉抱歉~),mysql中的类型大致能分为数值、时间、string、文本和二进制类型,它们下面都还有很多细节,下面我将主要从实操方面带你去领略mysql类型的细节。后续将继续更新mysql的约束(下)将快速更新,敬请期待!
————————
早关注不迷路,话不多说安全带系好,发车啦(建议电脑观看)。

——————
本章因为大多为插入和创建表,而这些在之前已经讲过,不懂的可以看一下这篇表的必备操作blog,所以代码展示就会较少(因为主要就是在创建表时进行了设置类型,然后观察插入的细节,就不冗余的写代码了)


MySQL数据类型分类

大致如下图:
在这里插入图片描述
其中各个类型的范围:
在这里插入图片描述


1. tinyint类型

  1. tingyint,只能插入1byte的数据(-128~127)

  2. 当插入超过1byte的数据时就会报错:

  3. 还能定位无符号的:tinyind unsigned(此时就是从0~255,注意不是用来扩大数据范围的)

  4. 当插入数据超过范围时,MySQL就会直接拦截报错(不像语言将超过范围的数据编译器会截断)。也就是说,被成功插入到mysql中的数据,他们就一定是合法的!!mysql中,一般而言,数据类型本身也是一种约束。这样就能倒逼程序员,让其尽可能正确的插入

附:

  1. 约束:约束了使用者,表示即使使用者不能很好的使用,mysql也能保证数据的合法性
  2. mysql表中建立属性列:列名称 类型在后(正好和编程反过来)

2. bit类型

  1. bit [ ( M ) ] :位字段类型M表示每个值的位数,范围从1到64。如果M被忽略,默认为1。
    在这里插入图片描述

例:假如M = 1 也就是 1个比特位 就只能插入0 1

  1. 当插入比特位时,他是按照ASCII码来显示的(而又因为ASCII中0 1是不可视的数据,所以下图看不见)
    在这里插入图片描述
    证明如下(前提修改online列属性:bit(10),这样就能存在较大的ASCII码值,当存入可视化的数据就能看的见了,如a):
    在这里插入图片描述
  2. 位图结构最大是64:当超过64后就会报错:
    在这里插入图片描述

3. float浮点数类型

  1. float [ ( m , d ) ][ unsigned ]:M指定显示长度,d指定小数位数,共占用空间4个字节。
    举例使用:
    在这里插入图片描述
  2. 当 m = 4表示能装的数据、d = 2表示精度的个数(如99.99就是刚刚好符合条件的!)
    在这里插入图片描述
  3. 当精度你写的不够时,会给你默认为设置的小数个数(例如m = 4、d = 2时:输入10.0 就会存成 10.00 ,因为m = 4 且 d 会自动补齐,所以输入为 100.0 就不行了,因为小数会补成00,这样就超过了4位(也就是:100.00 这是超过了4位的))
    在这里插入图片描述
  4. 当在小数点超出范围后就会进行将超出范围的小数四舍五入的方式存入(但注意的是当四舍五入后同样是不能超过范围的也就是第5点)
    在这里插入图片描述
  5. 但并不表示如何时候都进行四舍五入,当在99.995往后时,超过的小数点的值大于等于5时就不能插入了(因为这样四舍五入后就会变成 100.00 就会 超过 范围)
    在这里插入图片描述
  6. float也能定义为无符号的,这样就不能插入负数了
    在这里插入图片描述
  7. 浮点数中的整数部分也是有精度的,当超过一定值后就会省略
    在这里插入图片描述

4. decimal

  1. 大部分同float类似,同样能插入小数,并且对于超出范围的小数将会四舍五入(并且对一些特别的也不会插入成功 99.995),以及会将小数点个数不足的补上0
    在这里插入图片描述
  2. 虽然decimal和float很像,但还是有区别的:
    在这里插入图片描述
  3. decimal不会像float一样去对于一些过大的数据进行处理,也就是它的精度比float更高
    1. float表示的精度大约是7位。
    2. decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,默认是10

5. 字符串类型

5.1 char

  1. char(L):固定长度字符串,L是可以存储的长度,单位为字符(字符的概念和语言中不同,他代表的就是一个符号)例:当char(2) 表示可以存放两个字符,可以是字母或汉字,但是不能超过2个。
    在这里插入图片描述
    再例如:中文同样也是符号个数
    在这里插入图片描述
  2. L的最大范围是255
    在这里插入图片描述

5.2 varchar变成字符串

  1. varchar(L): 可变长度字符串,L表示字符长度,最大长度65535个字节也就是21845个字符(1字符char = 8字节byte)),同样当有括号时,本质和char很像。
    具体如下图(当设置为6字符时,当插入:“中国人,加油!” 时,就有7个字符了,此时就超了所以插不进去)
    在这里插入图片描述
    关于varchar(len),len到底是多大,这个len值,和表的编码密切相关
  • varchar长度可以指定为0到65535之间的值,但是有1 - 3 个字节用于记录数据大小,所以说有效字节数是65532。
  • 当我们的表的编码是utf8时,varchar(n)的参数n最大值是65532/3=21844[因为utf中,一个字符占用3个字节],如果编码是gbk,varchar(n)的参数n最大是65532/2=32766(因为gbk中,一个字符占用2字节)

具体如下图(当中文类型为utf-8):

在这里插入图片描述

5.3 比较char和varchar

在这里插入图片描述
如何选择定长或变长字符串?

  • 如果数据确定长度都一样,就使用定长(char),比如:身份证,手机号,md5
  • 如果数据长度有变化,就使用变长(varchar), 比如:名字,地址,但是你要保证最长的能存的进去。
  1. 定长的磁盘空间比较浪费,但是效率高。
  2. 变长的磁盘空间比较节省,但是效率低。
  3. 定长的意义是,直接开辟好对应的空间
  4. 变长的意义是,在不超过自定义范围的情况下,用多少,开辟多少

6. 日期和时间类型

常用的日期有如下三个:

1. date:

日期 ‘yyyy-mm-dd’ ,占用三字节

2. datetime:

时间日期格式 ‘yyyy-mm-dd HH:ii:ss’ 表示范围从 1000 到 9999 ,占用八字节

3. timestamp :

时间戳,从1970年开始的 yyyy-mm-dd HH:ii:ss 格式和datetime 完全一致,占四字节

三种时间类型类型实操

create table if not exists t11(t1 date,t2 datetime,t3 timestamp);

在这里插入图片描述
插入数据:

date: xxxx-xx-xx
datetime:xxxx-xx-xx xx:xx:xxinsert into t11(t1,t2) values('2000-10-01','1949-10-01 08:00:00');

对于时间戳来说不需要自己插入时间,当修改表内的属性时就会自动更改。
在这里插入图片描述
可以类似的理解成评论的实现方法:
当你发送评论时就会自动的带上你的时间,而这个时间一般就是使用了datestamp类型
在这里插入图片描述

7. enum(枚举)和set(集合)

  1. enum:枚举," 单选 "类型:enum(‘选项1’,‘选项2’,‘选项3’,…);
    该设定只是提供了若干个选项的值,最终一个单元格中,实际只存储了其中一个值。
  2. set:集合,“多选”类型:set(‘选项值1’,‘选项值2’,‘选项值3’, …);
    该设定只是提供了若干个选项的值,最终一个单元格中,设计可存储了其中任意多个值;

例:
有一个调查表votes,需要调查人的喜好, 比如(登山,游泳,篮球,武术)中去选择(可以多选),(男,女)[单选]。

其中性别就用enum类型(因为只能单选一个)、爱好就可以用set类型(他是可以多选的)

具体如下:
在这里插入图片描述
在这里插入图片描述

1. 当enum类型处插入别的其他值时就会报错:

在这里插入图片描述

2. 在enum中的类型,可以用下标表示插入数据

他是从1开始的(例如:男女的话下标就分别是1 2)

在这里插入图片描述

3. set的插入

使用方法和enum类似,同样不能使用超出范围的数据
不同于enum的是可以同时设置多个参数,并且以逗号区分

insert into votes values('曹操',1,'乒乓球,足球,游泳');
其中的1 在就enum中表示 男
而set中可以插入多个值

在这里插入图片描述

4. set用数字来插入

但注意的是该数字并不是下标==,这个数字是和元素的个数有关的位图(例如下图set有5中类型,那么它的位图就有5个:00000,注意的是位图的看法和正常的二进制是相反的

  • 例当为1时:10000(代表取出第一个元素)
  • 当为2时:01000(代表取出第二个元素)
  • 当为3时:11000(注意此时是同时取出第一个和第二个元素
  • 若设置为0下标该值会被设置为空串(注意并不是NULL)
    在这里插入图片描述

为什么说是相反的因为:
当值为7时:11100(就代表取出前三个元素),正常二进制的7:00111,而此处的7我们反过来看:11100(也就对应着所要元素位置)
在这里插入图片描述

5. 对enum和set类型的查找和一些细节处理

  1. enum能使用下标和直接查询
    在这里插入图片描述
select * from votes where gender=2;//查询votes表中的女

在这里插入图片描述
2. set类型能使用下标和直接查询
在这里插入图片描述

但注意的是它不能查找出有多个爱好中包含羽毛球的人(后面补充)

  1. 也能直接同时查找出有多个值:
    在这里插入图片描述

通过上两个案例来看,发现对set类型来说,当在一行数据中的set类型有多个值时,若直接查找其中的某一个值,是无法找到的:
因为select是直接看所有元素的,并不会判断其中是否包含。
处理方法:

  1. 首先需要知道:select后面是可以跟函数的
  2. 如:find_in_set(作用:在集合中找是否有该元素,若查找到返回下标,反之返回0,具体如下图):
    在这里插入图片描述
    那么可以:
    在set类型中:如何找到从有多个爱好(set值)中只要包含羽毛球爱好的人就符合条件
    那么就可以在select中使用find_in_set函数(用于select的where后面进行判断只要返回非0就表示真了),
    具体如下:
    在这里插入图片描述
    其中若要同时查找多个元素,注意的是,find_in_set并不能同时查找多个元素(因为find_in_set是查找元素),若要执行同时查找可以用 and进行逻辑与操作(or :逻辑或),进行再次的筛选。
    找到爱好同时包含:羽毛球和代码的人
    具体如下图:
    在这里插入图片描述

本章完。预知后事如何,暂听下回分解。

如果有任何问题欢迎讨论哈!

如果觉得这篇文章对你有所帮助的话点点赞吧!

持续更新大量MySQL细致内容,早关注不迷路。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/64445.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

迁移学习中模型训练加速(以mllm模型为例),提速15%以上

根据模型训练过程的显存占用实测的分析,一个1g参数的模型(存储占用4g)训练大约需要20g的显存,其中梯度值占用的显存约一半。博主本意是想实现在迁移学习(冻结部分参数)中模型显存占用的降低,结果不太满意,只能实现训练速度提升,但无法实现显存占用优化。预计是在现有的…

你了解网络层的 ICMP 吗?

你了解网络层的 ICMP 吗? 一. 什么是 ICMP二. ICMP 的工作原理三. ICMP 的结构四. ICMP 的常见应用五. ICMP 的局限性与安全性六. 总结 前言 这是我在这个网站整理的笔记,有错误的地方请指出,关注我,接下来还会持续更新。 作者:神…

32.在 Vue 3 中上传 KML 文件并在地图上显示

前言 在现代的地理信息系统(GIS)应用中,我们经常需要将地理空间数据加载到地图中以供可视化展示。KML(Keyhole Markup Language)是一种基于 XML 格式的文件格式,广泛用于存储地理信息数据,特别…

uniapp使用百度地图配置了key,但是显示Map key not configured

搞了我两天的一个问题。 hbuilderx版本:4.36 问题介绍: 我的项目是公司的项目,需要在H5端使用百度地图,使用vue-cli创建的uniapp,就是uni代码在src里的目录结构。就是使用这种方式才会遇到这个问题。 问题原因&#xf…

使用cuda12编译时报错block_merge_sort.cuh(169): error: expected a “,“ or “>“

模型的工程化版C程序使用CUDA11.3和11.6编译时没任何错误,为适应高版本的jetpack环境,切换到CUDA12编译时总是报错: /workspace/cuda-12.0/bin/nvcc /workspace/focc/iou3d_nms.cu -c -o ./build/CMakeFiles/bev.dir/src/./bev_generated_iou3d_nms.cu.…

React状态管理常见面试题目(二)

为什么 Redux 能做到局部渲染? Redux能做到局部渲染,主要是因为它采用了单向数据流和状态管理机制。在Redux中,整个应用的状态被存储在一个单一的store中,当状态发生变化时,Redux通过分发action来更新state,并通过re…

【Qt】drawText字体大小问题探究

背景 软件的一个功能是: 打开图片在图片上绘制序号,序号的样式是圆圈内包含数字将带有序号的图片打印出来 实现思路也很简单,在屏幕上显示时重写paintEvent函数,利用QPainter完成图片和序号的绘制。打印时只需要将QPainter对应…

Unity背包道具拖拽(极简版实现)

(感觉Csdn代码页面可以再大一点或者加个放大功能 不然得划着看不太舒服) 1.关键接口,三个拖拽相关的 2.关键参数,PointerEventData 一直没仔细看过,其实有包含鼠标相关的很多参数,鼠标点击次数&#xff…

Win11安装安卓子系统WSA

文章目录 简介一、启用Hyper-V二、安装WSA三、安装APKAPK商店参考文献 简介 WSA:Windows Subsystem For Android 一、启用Hyper-V 控制面板 → 程序和功能 → 启用或关闭 Windows 功能 → 勾选 Hyper-V 二、安装WSA 进入 Microsoft Store,下拉框改为 …

《红队和蓝队在网络安全中的定义与分工》

网络安全中什么是红队蓝队 在网络安全领域,红队和蓝队是一种对抗性的演练机制,用于测试和提升网络安全防御能力。 红队(Red Team) 定义与目标 红队是扮演攻击者角色的团队。他们的主要任务是模拟真实的网络攻击,利用各…

Redis 和 Mysql 中的数据一致性问题

Redis 和 MySQL 的数据很难直接实现 强一致性,但可以通过一些策略尽量接近或实现 最终一致性。下面从两者的特性、挑战以及解决方案来分析。 Redis 和 MySQL 的特性 Redis: 是一个基于内存的高性能键值数据库,常用于缓存、分布式锁和消息队…

数据结构 ——二叉树转广义表

数据结构 ——二叉树转广义表 1、树转广义表 如下一棵树&#xff0c;转换为广义表 root(c(a()(b()()))(e(d()())(f()(j(h()())())))) (根&#xff08;左子树&#xff09;&#xff08;右子树&#xff09;) 代码实现 #include<stdio.h> #include<stdlib.h>//保存…

企业车辆管理系统(源码+数据库+报告)

一、项目介绍 352.基于SpringBoot的企业车辆管理系统&#xff0c;系统包含两种角色&#xff1a;管理员、用户,系统分为前台和后台两大模块 二、项目技术 编程语言&#xff1a;Java 数据库&#xff1a;MySQL 项目管理工具&#xff1a;Maven 前端技术&#xff1a;Vue 后端技术&a…

ubuntu20.04复现 Leg-KILO

这里写目录标题 opencv版本问题下载3.2.0源代码进入解压后的目录创建构建目录运行 CMake 配置 配置时指定一个独立的安装目录&#xff0c;例如 /opt/opencv-3.2&#xff1a;出错&#xff1a; 使用多线程编译错误1&#xff1a; stdlib.h: 没有那个文件或目录错误2&#xff1a;er…

如何保证开源AI呼入机器人和AI呼出机器人的数据安全性?

如何保证开源AI呼入机器人和AI呼出机器人的数据安全性&#xff1f; 作者&#xff1a;开源呼叫中心FreeIPCC 确保开源AI呼入机器人和AI呼出机器人的数据安全性是部署这些智能系统时不可或缺的一部分。随着越来越多的企业依赖于自动化客户服务和外呼营销&#xff0c;保护用户隐…

基于SpringBoot+vue的高校学生成绩管理系统

目录 一、绪论1.1 开发背景1.2 系统开发平台1.2.1 Vue简介1.2.2 IDEA简介1.2.3 MySQL简介 1.3 系统开发环境 二、需求分析2.1 系统需求分析2.2 系统数据流图 三、概要设计3.1 业务流程分析 四、详细设计4.1 系统功能结构图4.2 E-R模型4.3 数据库表设计 五、模块实现5.1 管理员主…

微信小程序苹果手机自带的数字键盘老是弹出收起,影响用户体验,100%解决

文章目录 1、index.wxml2、index.js3、index.wxss1、index.wxml <!--index.wxml--> <view class="container"><view class="code-input-container"><view class="code-input-boxes"><!-- <block wx:for="{{…

Docker--Docker Image(镜像)

什么是Docker Image&#xff1f; Docker镜像&#xff08;Docker Image&#xff09;是Docker容器技术的核心组件之一&#xff0c;它包含了运行应用程序所需的所有依赖、库、代码、运行时环境以及配置文件等。 简单来说&#xff0c;Docker镜像是一个轻量级、可执行的软件包&…

RabbitMQ的核心组件有哪些?

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ的核心组件有哪些&#xff1f;】面试题。希望对大家有帮助&#xff1b; RabbitMQ的核心组件有哪些&#xff1f; 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 RabbitMQ是一个开源的消息代理&#xff08;Messag…

[OpenGL] Transform feedback 介绍以及使用示例

一、简介 本文介绍了 OpenGL 中 Transform Feedback 方法的基本概念和代码示例。 二、Transform Feedback 介绍 1. Transform Feedback 简介 根据 OpenGL-wiki&#xff0c;Transform Feedback 是捕获由顶点处理步骤&#xff08;vertex shader 和 geometry shader&#xff0…