当前位置: 首页 > news >正文

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细致内容,早关注不迷路。

相关文章:

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

每日激励:“当你觉得你会幸运时,幸运就会眷顾你,所以努力吧,只要你把事情做好,并觉得你会幸运,你将会变得幸运且充实。” 绪论​: 本章继续学习MySQL的知识,本章主要讲到mysql中的所…...

Gin-vue-admin(1):环境配置和安装

目录 环境配置如果443网络连接问题,需要添加代理服务器 后端运行前端运行 环境配置 git clone https://gitcode.com/gh_mirrors/gi/gin-vue-admin.git到server文件目录下 go mod tidygo mod tidy 是 Go 语言模块系统中的一个命令,用于维护 go.mod 文件…...

如何在centos系统上挂载U盘

在CentOS上挂载NTFS格式的U盘,需要执行一系列步骤,包括识别U盘设备、安装必要的软件、创建挂载点,并最终挂载U盘。以下是在CentOS上挂载NTFS格式U盘的详细步骤: 一、准备工作 确认CentOS版本: 确保你的CentOS系统已经安装并正常运行。不同版本的CentOS在命令和工具方面可能…...

2024年12月大语言模型最新对比:GPT-4、Claude 3、文心一言等详细评测

前言 随着人工智能技术的快速发展,大语言模型(LLM)已经成为了技术领域最热门的话题。本文将详细对比目前主流的大语言模型,帮助大家选择最适合的工具。 一、OpenAI GPT系列 1. GPT-4 核心优势: 多模态理解能力强 逻辑推理能力出色 创造…...

openjdk17 从C++视角看 String的intern的jni方法JVM_InternString方法被gcc编译器连接

symbols-unix 文件部分内容 JVM_IHashCode JVM_InitClassName JVM_InitStackTraceElement JVM_InitStackTraceElementArray JVM_InitializeFromArchive JVM_InternString 要理解在 symbols-unix 文件中包含 JVM_InternString 方法的原因,我们需要从构建过程、符号…...

day16 python(4)——UnitTest

【没有所谓的运气🍬,只有绝对的努力✊】 目录 1、UnitTest框架介绍 1.1 UnitTest框架 1.2 unitTest的组成(5部分) 1.2.1 TestCase(测试用例) 1.2.2 TestSuit 和 TestRunner 【方法1】 【方法2】 1…...

Kafka快速扫描

Architecture 系统间解耦,异步通信,削峰填谷 Topic 消息主题,用于存储消息 Partition 分区,通过扩大分区,可以提高存储量 Broker 部署Kafka服务的设备 Leader kafka主分区 Follwer kafka从分区 高性能之道&#xff1a…...

python打包时候遇到问题:ImportError: DLL load failed while importing _ufuncs: 找不到指定的模块

问题:python打包时候遇到问题:ImportError: DLL load failed while importing _ufuncs: 找不到指定的模块 解决方法 pip uninstall scipy pip install scipy总结:卸载出问题的库并重新安装,再次通过pyinstaller -F -w xxx.py 打包…...

【6】期末复习C#第6套

1.两个指针变量不能 2.函数可以有也可以没有形参 3.开始执行点是程序中的main函数 4.调用函数时形参和实参各占一个独立的存储单元 5.给指针赋NULL值和地址值 6.函数头和函数体 7.(C)形式参数是局部变量 8.在C语言中,一维数组的定义方…...

开源轮子 - EasyExcel01(核心api)

EasyExcel01 - 核心api 本文整理自掘金大佬 - 竹子爱熊猫 https://juejin.cn/post/7405158045662576640 文章目录 EasyExcel01 - 核心api一:初相识EasyExcel1:写入excel入门2:读取Excel入门 二:数据模型注解1:读写通用…...

SpringBoot3+Vue3开发在线考试系统

项目介绍 项目分为3种角色,分别为:超级管理员、老师、学生。超级管理员,负责系统的设置、角色的创建、菜单的管理、老师的管理等功能,也可以叫做系统管理员;老师角色,负责系统业务的管理,包括学…...

2. Kafka入门-开发环境准备

Kafka入门-开发环境准备 1. 环境准备2. Centos7安装2.1 镜像安装2.2 初始化配置2.3 JDK1.8安装 ---------------------------------------------------------------------------------------------- 1. 环境准备 2. Centos7安装 2.1 镜像安装 2.2 初始化配置 设置系统时区 …...

Halcon中histo_2dim(Operator)算子原理及应用详解

在Halcon中,histo_2dim算子是一个用于计算双通道灰度值图像的直方图的工具。以下是对该算子的原理及应用的详细解释: 一、原理 histo_2dim算子的函数原型为:histo_2dim(Regions, ImageCol, ImageRow : Histo2Dim : : )。 输入参数&#xff…...

TCP 与 UDP

TCP与UDP的区别分析 TCP(传输控制协议)和UDP(用户数据报协议)是互联网协议族(TCP/IP)中的两种重要传输层协议。它们在数据传输的方式、特性以及应用场景方面存在显著差异。以下将从多个方面详细分析TCP与U…...

ubuntu 安装更新 ollama新版本

ubuntu 安装更新 ollama新版本 我这里是 2024-12-18 ollama 版本是 0.5.3 1手动下载 ollama-linux-amd64.tgz https://github.com/ollama/ollama/releases 2下载脚本 https://ollama.com/install.sh install.sh 和 ollama-linux-amd64.tgz 在相同路径下 修改:…...

Numpy基本操作

目录 1、生成数组的方法 1.1、生成0和1的数组 1.2、从现有数组生成 1.2.1、生成方式 1.3、生成固定范围的数组 1.4、生成随机数组 1.4.1、使用模块介绍 1.4.2、均匀分布 1.4.3、正态分布 1.4.4、正态分布创建方式 1、生成数组的方法 1.1、生成0和1的数组 import numpy…...

本地部署webrtc应用怎么把http协议改成https协议?

环境: WSL2 Ubuntu22.04 webrtc视频聊天应用 问题描述: 本地部署webrtc应用怎么把http协议改成https协议? http协议在安卓手机浏览器上用不了麦克风本,来地应用webrtc 本来是http协议,在安卓手机上浏览器不支持使…...

基于xiaothink对Wanyv-50M模型进行c-eval评估

使用pypi安装xiaothink: pip install xiaothink1.0.2下载模型: 万语-50M 开始评估(修改模型路径后即可直接开始运行,结果保存在output文件夹里): import os import json import pandas as pd import re from tqdm import tqdm i…...

使用k6进行kafka负载测试

1.安装环境 kafka环境 参考Docker搭建kafka环境-CSDN博客 xk6-kafka环境 ./xk6 build --with github.com/mostafa/xk6-kafkalatest 查看安装情况 2.编写脚本 test_kafka.js // Either import the module object import * as kafka from "k6/x/kafka";// Or in…...

Unity A*算法实现+演示

注意: 本文是对基于下方文章链接的理论,并最终代码实现,感谢作者大大的描述,非常详细,流程稍微做了些改动,文末有工程网盘链接,感兴趣的可以下载。 A*算法详解(个人认为最详细,最通俗易懂的一…...

网络六边形受到攻击

大家读完觉得有帮助记得关注和点赞!!! 抽象 现代智能交通系统 (ITS) 的一个关键要求是能够以安全、可靠和匿名的方式从互联车辆和移动设备收集地理参考数据。Nexagon 协议建立在 IETF 定位器/ID 分离协议 (…...

SkyWalking 10.2.0 SWCK 配置过程

SkyWalking 10.2.0 & SWCK 配置过程 skywalking oap-server & ui 使用Docker安装在K8S集群以外,K8S集群中的微服务使用initContainer按命名空间将skywalking-java-agent注入到业务容器中。 SWCK有整套的解决方案,全安装在K8S群集中。 具体可参…...

label-studio的使用教程(导入本地路径)

文章目录 1. 准备环境2. 脚本启动2.1 Windows2.2 Linux 3. 安装label-studio机器学习后端3.1 pip安装(推荐)3.2 GitHub仓库安装 4. 后端配置4.1 yolo环境4.2 引入后端模型4.3 修改脚本4.4 启动后端 5. 标注工程5.1 创建工程5.2 配置图片路径5.3 配置工程类型标签5.4 配置模型5.…...

<6>-MySQL表的增删查改

目录 一,create(创建表) 二,retrieve(查询表) 1,select列 2,where条件 三,update(更新表) 四,delete(删除表&#xf…...

React Native 开发环境搭建(全平台详解)

React Native 开发环境搭建(全平台详解) 在开始使用 React Native 开发移动应用之前,正确设置开发环境是至关重要的一步。本文将为你提供一份全面的指南,涵盖 macOS 和 Windows 平台的配置步骤,如何在 Android 和 iOS…...

最新SpringBoot+SpringCloud+Nacos微服务框架分享

文章目录 前言一、服务规划二、架构核心1.cloud的pom2.gateway的异常handler3.gateway的filter4、admin的pom5、admin的登录核心 三、code-helper分享总结 前言 最近有个活蛮赶的,根据Excel列的需求预估的工时直接打骨折,不要问我为什么,主要…...

渲染学进阶内容——模型

最近在写模组的时候发现渲染器里面离不开模型的定义,在渲染的第二篇文章中简单的讲解了一下关于模型部分的内容,其实不管是方块还是方块实体,都离不开模型的内容 🧱 一、CubeListBuilder 功能解析 CubeListBuilder 是 Minecraft Java 版模型系统的核心构建器,用于动态创…...

如何将联系人从 iPhone 转移到 Android

从 iPhone 换到 Android 手机时,你可能需要保留重要的数据,例如通讯录。好在,将通讯录从 iPhone 转移到 Android 手机非常简单,你可以从本文中学习 6 种可靠的方法,确保随时保持连接,不错过任何信息。 第 1…...

【HTML-16】深入理解HTML中的块元素与行内元素

HTML元素根据其显示特性可以分为两大类:块元素(Block-level Elements)和行内元素(Inline Elements)。理解这两者的区别对于构建良好的网页布局至关重要。本文将全面解析这两种元素的特性、区别以及实际应用场景。 1. 块元素(Block-level Elements) 1.1 基本特性 …...

BCS 2025|百度副总裁陈洋:智能体在安全领域的应用实践

6月5日,2025全球数字经济大会数字安全主论坛暨北京网络安全大会在国家会议中心隆重开幕。百度副总裁陈洋受邀出席,并作《智能体在安全领域的应用实践》主题演讲,分享了在智能体在安全领域的突破性实践。他指出,百度通过将安全能力…...