【MySQL】数据库数据类型

文章目录

  • 1. 整体概要
  • 2. 数值类型
    • (有符号) tinyint 创建表
    • (无符号) tinyint 创建表
    • bit类型
    • float 类型
    • (无符号)float
    • decimal
  • 3. 二进制类型
    • char类型
    • varchar类型
  • 4. 日期时间
    • 日期时间类型
  • 5. string 类型
    • enum类型和set类型
    • enum类型和set类型的查找
      • 在枚举中的查找
      • 在set中的查找

1. 整体概要

看起来分为很多类型,例如数值类型,有一些看一眼就懂啦,所以不会全部介绍

2. 数值类型

(有符号) tinyint 创建表

进入 test_db数据库中,并创建表t1 ,其内部包含 tinyint类型的num


输入 desc t1; 查看t1表结构

tinyint类型为一个字节,有符号,所以取值范围为 -128 到 127


向t1 表中分别插入 -128 、128 、1


输入 select * from t1; 查询 t1 表的结构


由于 -129 和128 超过了 tinyint类型的取值范围,所以插入失败


(无符号) tinyint 创建表

再次创建表,内部包含一个无符号的 tinyint类型的num
所以取值范围为 0 到255


输入 desc t2; 查询t2表的结构


由于取值范围是 0 到255
所以向t2表插入 0 100 255 ,可以插入成功
而向t2表插入 -1,则会插入失败

bit类型

bit[M] :位字段类型,M表示每个值的位数,范围从1到64,如果M被忽略,默认为1

先进入 test_db 数据库中,创建一张 t3表
内部包含 int类型的id 、 1字节的online
id 表示 用户某一个身份id
online 表示 当前用户是否登录 (1表示登录 0表示没有登录)


插入 (123 ,0 ) 表示123号用户不在线
插入 (124 ,1 ) 表示 124号用户在线
可当插入 (123,5)时 ,由于 online 的类型为1个比特位,所以只能插入0或者1,所以会报错


输入 select * from t3; 即查看t3表的结构
发现online 对应的位置 什么都看不到
是因为通常以ASCII值形式显示的,而ASCII值在当前是不可显示的


让 online 以十进制方案显示出来
这样就可以看到 0 或者 1


创建表时,bit范围是1到64,而当前设置是65,所以创建表不成功 会报错

float 类型

float [ (m,d) ] [unsigned] : m指定显示长度(数字位数的总个数) d指定小数位数 占用空间4个字节


创建一张表t5,包含 int类型的id 以及 float类型的salary,并且salary共有4位,其中2位是小数
id 表示 这个人的身份
salary 表示 这个人的工资
float [ (4,2) ] 的取值范围是 -99.99 和 99.99


向t5表插入 (1,99.99) 和(1,-99.99) ,是可以插入成功的
(float的取值范围是有符号区分的)


若slary为23.46,则插入成功,并且显示为23.46


若slary为23.467,则插入成功,并且显示为23.47 ,因为四舍五入,将其进位


若slary为23.464,则插入成功,并且显示为23.46,因为四舍五入,将其舍去

所以进行浮点数存储时,若要求是2位精度,而传入更多位的精度,mysql就会采用 四舍五入的方式 将数据进行存储


(无符号)float

mysql支持定义符号的浮点数

float [ (4,2) ] 的取值范围为 0 到 99.99

创建一张表t6,内部包含 一个bigint类型的id 以及 无符号的浮点数类型的salary,并且salary共有4位,其中2位是小数


若插入 一个99.999,正常来说小数末尾是9 是要四舍五入的,但是进位 就会超过99.99的取值范围 ,所以会报错


decimal

decimal (m,d) [unsigned] : 定点数m指定长度 ,d表示小数点的位数

decimal(5,2) 的取值范围是 -999.99 - 999.99
decimal(5,2)unsigned的取值范围是 0 - 999.99
decimal和float很像,但是有区别:
float 和 decimal 表示的精度不一样


创建一张表 t7 ,内部包含 float类型的f1,f1总长度为10 ,其中小数部分为8
以及decimal 类型的f2,f2总长度为4,其中小数部分为2


当插入 99.99 在decimal的取值范围内时,则插入成功
当插入99.999不在decimal的取值范围内时,则插入失败


将属于t7表的 decimal类型的f2 的精度 改为 总长度为10 ,其中小数部分为8


在t7表中的成员 f1和f2中分别插入 23.12345612

输入 select *from t7; 查看t7表的信息 发现 f1是精度方面的问题

float在精度过大时,会进行优化策略
但decimal不会这样,decimal可以完全保证数据的精度

3. 二进制类型

char类型

char(L) : 固定长度字符串,L是可以存储的长度,单位为字符,最大长度值为255


在test_db数据库中,创建一张表t8 ,内部包含 int类型的id 以及 char类型的name


输入 desc t8; 查看t8表中更详细信息
t8表中的name 最多储存2个字符


向t8表中插入 一个字符’a’ 或者插入两个字符’ab’ 时,就可以插入成功
向t8表中插入三个字符’abc’时,就会报错


MySQL中的字符代表一种符号,一个汉字代表一个字符

当插入1个字符 中 和2个字符 中国 时,是可以插入成功的
但当插入 3个字符 中国人时 ,因为最多储存2个字符,所以会报错


varchar类型

varchar(L) :可变长度字符串,L表示字符串长度,最大长度为65535个字节


创建一张表t9,内部包含int类型的id 和 varchar类型的name,最多储存6个字符
并默认字符集为uft8


每一个汉字都可以看做是一个字符
若输入 1个字符 中, 3个字符中国人 都可以插入成功
若输入 7个字符时,就会报错


想要修改 t9表中的name成员的varchar类型 最多储存65536个字符
但是报错显示 最多 为21845 个字符 ,可明明varchar 最大长度为65535个字节

MysQL在存储varchar类型时,是按照utf8编码的
在uft8编码中,一个英文字符等于1个字节,一个中文等于3个字节
假设以中文计算,21845个字符 乘以3 就为 65535 个字节


char为固定长度字符串,类似于c++中的数组
如:char(6) 就表示数组字符个数为6个字符,可能只用了1个字符空间,但是依旧会给6个字符空间

varchar为变长字符串
varchar(len) len定义多大就表示字符空间的上限
如:varchar(6) 可能只用了1个字符空间,就只会分配保存一个字符空间


varchar的字节长度在0 -65535之间 ,需要有1-3个字节用于记录数据的大小
(传入数据的大小不同,有可能数据小 1个字节就能记录,有可能数据太大,就需要3个字节才能记录)
假设有3个字节记录数据,所以有效字节数为65532

当表的编码为utf8时,varchar(len) 的参数 len最大值为 65532/3=218844
(一个字符占用3个字节为例)
所以最大字符个数为 21844


创建一张表t10,内部包含 varchar类型的name ,其最多储存21845个字符
因为超过了21844范围,所以会报错


当表中 name的varchar类型的取值为21844时,就可以创建成功


4. 日期时间

日期时间类型

常用的日期如下:
date:日期 ‘yyy-mm-dd’ (年月日),占用三个字节
datetime: 时间日期格式 ‘yyyy-mm-dd HH: ii:ss’ (年 日 时 分 秒) 表示范围从1000到9999,占用八个字节
timestamp:时间戳 ,从1970年开始的 yyy-mm-dd HH:ii:ss (年 月 日 时 分 秒) 格式和 datetime 完全一致,占用四个字节


创建一张表 t10 ,内部包含 date类型的t1 ,datetime类型的t2,timestamp类型的 t3


输入 desc t10; 查看t10表的更多详细信息
t3的类型为时间戳,默认值为 CURRENT_TIMESTAMP
扩展说明:创建表结构时,向表中插入数据,timestamp会自动更新
而date与datetime 需要外部插入


向t10表中的成员 date类型的t1 和 datetime类型的t2 分别插入 2001-10-02 和2002-10-03 08:00:00

输入 select * from t10; 查看t10表的更详细的信息
发现t3自动更新为当前时间


当输入 update t10 set t1=‘2003-10-04’; 更新t10表中t1的时间
发现t3所表示的时间戳 也会跟着变化

5. string 类型

enum类型和set类型

enum:枚举
enum(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,实际只存储其中一个值
如:问卷调查 性别 只能选男或者女


set :集合
set(‘选项1’,‘选项2’,‘选项3’);
提供若干个选项的值,最终一个单元格中,可存储任意多个值
如:问卷调查 爱好 可以选打羽毛球 乒乓球 篮球等


创建一张表 votes,其中包含 最多存储30字节的名字 、 性别 、 爱好
同时 性别 只能从男或者女中 选择一个
而爱好 可以从 代码 篮球 游泳中 选择一个或者多个


向votes表中插入 姓名为 张三 性别为 男 爱 好为代码


当性别中 插入 0 和3 是不可以的,可插入 1 和 2 是可以的


输入 select * from votes 时,发现 1对应性别男 2对应性别女

所以使用枚举类型,可以使用对应的枚举常量
也可以使用枚举常量对应的下标 (从1开始 分别代表第一个枚举值 依次往后推)


向votes表中插入 姓名 为赵六 、性别为男、 爱好为 代码、篮球、游泳
(不允许插入不存在的爱好,同时也可以选择插入一个爱好或者多个爱好)


enum类型 与 set类型 允许为空

只插入 名字,性别与爱好会显示为NULL
NULL表示什么都没有


’ ’ 表示有东西,但是 为空串

若set类型 对应的爱好 插入 0 ,则显示为空串
若set类型 对应的爱好 插入 1 ,则显示为第一个设置的值 ,依次类推


若set类型 对应的爱好 插入 2,则显示为第二个设置的值
若set类型 对应的爱好 插入 3 ,则显示为第一个设置的值 和第二个设置的值


因为共有3个爱好,所以设置3个比特位 000
从右到左,依次为从低到高
若表示代码,则为 001
若表示篮球,则为 010
若表示代码和篮球,则为011
若表示游泳,则为 100


enum类型和set类型的查找

在枚举中的查找

输入 select * from votes where gender=‘男’;
挑选出votes表中所有男生的信息


输入 select * from votes where gender=‘女’;
挑选出votes表中所有女生的信息


在set中的查找

输入 select * from votes where hobby=‘游泳’;
挑选出votes表中爱好只有游泳的人
有的人爱好是广泛的,其中就包含游泳,但是筛选并不显示


所以需要借助 mysql的筛选函数 —— find_in_set 函数

find_in_set(sub,str,str_list):如果sub在str_list中,则返回下标,如果不在,返回0;
str_list 用逗号分隔的字符串


输入 select * frin votes where find_in_set(‘游泳’,hobby);
在votes表 的 hobby 查找所有爱好有游泳 的人


and相当于 C语言的逻辑与
在votes表 的 hobby 查找所有爱好有游泳 以及 爱好有篮球的人

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

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

相关文章

函数栈帧的创建和销毁

目录 引言: 1,函数栈帧的概念 2,函数栈帧的创建与销毁过程 2.1预备知识 2.2main函数栈帧的创建 2.2.1push ebp 2.2.2mov ebp,esp 2.2.3sub esp,0E4h 2.2.4push ebx ;push esi;push edi 2…

【Windows】Edge浏览器自动更新服务启用选禁用被拒绝访问的解决方案

Windows系统的服务窗口里,把一些服务的启动类型选择禁用有可能会提示拒绝访问,怎么弄呢,这里讲一讲怎样禁用这个服务。 举一个类似禁用服务的例子:怎样关闭Edge浏览器的自动更新服务, 关闭服务 已知,Win…

Javascript命令模式

Javascript命令模式 1 什么是命令模式2 命令模式的例子—菜单程序3 JavaScript 中的命令模式4 撤销命令5 宏命令 1 什么是命令模式 在一个餐厅中,当客人现场点餐或者打电话订餐时,老板会把客人的需求写在清单上,厨师会按照清单的顺序给客人炒…

C++STL的迭代器(iterator)

一、定义 迭代器是一种检查容器内元素并且遍历容器内元素的数据类型。 【引用自:C迭代器(iterator)_c iterator_NiUoW的博客-CSDN博客】迭代器是一个变量,相当于容器和操纵容器的算法之间的中介。C更趋向于使用迭代器而不是数组下…

makesense在线yolov5标注

文章目录 一、创建图片文件夹和label.txt二、在线标注数据 参考文章博主:风吹落叶花飘荡 一、创建图片文件夹和label.txt 创建一个放置图片的文件夹images,存放需要标注的图片(图片最好重命名为1,2,3…避免后面混淆) 创建label.t…

在软件测试行业这种情况下,凭什么他能拿25k?我却约面试都难?

在当今竞争激烈的软件测试行业中,近期的招聘市场确实面临一些挑战。大量的求职者争相涌入岗位,许多热衷于功能测试的人士甚至难以找到理想的工作机会。更不幸的是,连自动化测试和性能测试这些专业领域也受到了测试开发人员的竞争压力。然而&a…

整理MongoDB文档:身份验证

整理MongoDB文档:身份验证 个人博客,求关注。 文章概叙 本文主要讲MongoDB在单机状态下的账户配置。理解了MongoDB的语法,对于如何配置用户权限会知道怎么配置,但是请注意给谁配置什么权限才是最重要的。 最小权限原则 系统的每个程序或者…

kubernetes(2)

pod管理 应用部署 上传测试镜像 [rootk8s1 docker]# docker push reg.westos.org/library/myapp:v1 [rootk8s1 docker]# docker push reg.westos.org/library/myapp:v2创建自助式pod(生产不推荐) [rootk8s2 ~]# kubectl run demo --imagemyapp:v1[ro…

uniapp 安装 u-view 组件库

u-view 组件库安装教程:https://uviewui.com/components/install.html 注:以下使用 HBuilderx 安装 u-view 2.0 版本,不适用于其它版本。 1.安装 u-view 组件库 2、注册并登录 HBuilderx 账号,点击下载 u-view 组件库。 3、点击…

如何开发一个 Safari 插件

本文字数:2493字 预计阅读时间:15分钟 由于常用浏览器是Safari,而Safari浏览器的插件比不上Chrome,所以就有了自己开发常用的Safari插件的想法。 打算开发当前页面生成二维码的Extension,因为网络原因,AirD…

真实感受:是智能家居在选择合适的技术!

科技从来都是为了让我们的生活更加的简单、舒适,而智能家居的智能,体现在如何更更更方便的使用我需要控制的家居。 例如:下班躺在床上想休息,房间和大厅的灯还开着,这时你会选择什么产品躺着解决问题? 红外…

Hadoop3教程(二十八):(生产调优篇)NN、DN的多目录配置及磁盘间数据均衡

文章目录 (148)NN多目录配置(149)DataNode多目录配置及磁盘间数据平衡磁盘间数据均衡 参考文献 (148)NN多目录配置 NN多目录的意思是,本地目录可以配置成多个,且每个目录存放内容相…

20款VS Code实用插件推荐

前言: VS Code是一个轻量级但功能强大的源代码编辑器,轻量级指的是下载下来的VS Code其实就是一个简单的编辑器,强大指的是支持多种语言的环境插件拓展,也正是因为这种支持插件式安装环境开发让VS Code成为了开发语言工具中的霸主…

【数据结构】八大排序

目录 1. 排序的概念及其作用 1.1 排序的概念 1.2 排序运用 1.3 常见的排序算法 2. 常见排序算法的实现 2.1 插入排序 2.1.1 基本思想 2.1.2 直接插入排序 2.1.3 希尔排序(缩小增量排序) 2.2 选择排序 2.2.1 基本思想 2.2.2 直接选择排序 2.2…

Linux下Samba服务安装及启用全攻略

Linux下Samba服务安装及启用全攻略 前言一、安装SSH Server二、安装Samba Server1.安装net-tool2.建立账号的samba3.windows通过Samba与linux共享文件4.使用远程工具登录Linux 总结 前言 提示:本文详解了在Linux系统下如何安装和启用Samba服务,涵盖了从…

【2023年11月第四版教材】软考高项极限冲刺篇笔记(2)

1 我们要知道的事 1、考试的选择题不会出假大空的管理,一般较为具体 2.3 信息系统治理 首先治理的目标是什么 治理的管理层分为三层 原则:简单透明适合 COBIT IT审计范围:总体、组织、物理、逻辑、其他 IT审计风险:固有、控制、检查、总体审计 IT审计方法:访谈、调查、…

【微服务 SpringCloudAlibaba】实用篇 · Nacos注册中心

微服务(5) 文章目录 微服务(5)1. 认识和安装Nacos2. 服务注册到nacos和拉取服务1)引入依赖2)配置nacos地址3)重启 3. 服务分级存储模型3.1 给user-service配置集群3.2 同集群优先的负载均衡 4. …

vue el-dialog弹出框自定义指令实现拖拽改变位置-宽度-高度

前言 在实际开发中我们经常使用el-dialog弹出框做表单,一般情况都是居中。遮挡到了一部分数据 当我们想要查看弹出框下面的数据时,就只能先把弹出框关闭,查看完数据之后在打开弹框 我们通过动态样式,和鼠标事件就可以实现。但自…

effective c++学习笔记(后四章)

六 继承与面向对象设计 红色字 \color{FF0000}{红色字} 红色字 32 确定你的public继承塑模出 is-a关系 如果你令class D (“Derived”)以public形式继承class B (“Base”),你便是告诉C编译器(以及你的代码读者)说,每一个类型为…

Origami Studio for Mac:塑造未来,掌握原型设计之巅

在当今高度竞争的设计领域,原型设计的重要性不言而喻。它不仅是沟通想法,也是测试和改进设计的关键环节。而现在,一款强大的原型设计工具——Origami Studio for Mac,正在席卷设计界,以其独特的功能和卓越的性能&#…