文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

【MySQL系列】深入学习数据类型

2023-08-16 13:45

关注

「前言」文章内容大致是数据库的数据类型。

「归属专栏」MySQL

「主页链接」个人主页

「笔者」枫叶先生(fy)

MySQL

一、数据类型分类

C/C++语言有自己的数据类型,MySQL也有自己的数据类型,常见的的数据类型如下:
在这里插入图片描述
注:带红色的是下面要讲解的类型

数据类型的作用:

二、数值类型

2.1 tinyint类型

接下来讲解数值类型的整型,整型的取值范围跟C/C++语言的数据类型取值范围都差不多,同样有有符号和无符号的区别
在这里插入图片描述

整型以tinyint为例

创建一个表,表当中包含一个tinyint类型的列,默认其为有符号类型
在这里插入图片描述
圆括号4,下一个篇章约束再谈,这里暂时不理会
在这里插入图片描述
tinyint类型占用1字节,有符号tinyint的取值范围为-128~127,进行插入数据
在这里插入图片描述
如果插入的数据不在-128~127范围,则不允许插入,报错:
在这里插入图片描述

下面是无符号tinyint范围测试

创建一个表,表当中包含一个tinyint类型的列,并指定其为无符号类型
在这里插入图片描述
tinyint类型占用1字节,无符号tinyint的取值范围为0~255,进行插入数据:
在这里插入图片描述
如果插入的数据不在0~255范围,则不允许插入,报错:
在这里插入图片描述
注意:向MySQL插入不合法的数据,MySQL会直接拦截我们的操作;如果我们已经将数据成功插入表中,那么插入的数据一定合法的。所以在MySQL中,数据类型本身就是一种约束。

从上面的例子也可以看出,MySQL表中建立属性列是列名字在前,类型在后

num(列名) tinyint(类型)

注意:尽量不使用unsigned,对于int类型可能存放不下的数据,int unsigned同样可能存放不
下,与其如此,还不如设计时,将int类型提升为bigint类型

以上便是tinyint的介绍,其他整型也类似,不再演示

2.2 bit类型

基本语法:

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

注:[] 的部分可以省略

创建一个表,表当中包含一个int类型和一个bit类型,bit默认为1位
在这里插入图片描述
向表中插入数据,一个bit位只允许插入0,1
在这里插入图片描述
查看表的数据,发现bit类型不显示,根本原因是因为bit类型在显示时,是按照ASCII码对应的值进行显示的,有些字符是不可显示的
在这里插入图片描述
如果要查看该值,强转为十进制
在这里插入图片描述
修改表,改成 bit(10)
在这里插入图片描述
再次插入数据,结果证明确实是按ASCII码对应的值进行存储
在这里插入图片描述
bit(M),M最大值是64,如果超过了创建表就会失败
在这里插入图片描述
如果我们有这样的需求,只存放0或1,这时可以定义bit(1),这样可以节省空间

2.3 小数类型

2.3.1 float类型

语法:

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

创建一个表,包含一个float(4,2)类型的列,默认其为有符号类型
在这里插入图片描述
float(4,2)表示的范围是-99.99 ~ 99.99,在该范围内可以插入数据,超过范围报错
在这里插入图片描述
尝试插入超过范围的
说明:MySQL在保存值时会进行四舍五入
在这里插入图片描述
即使输入多位小数,也会按指定的格式显示
在这里插入图片描述
注意:无符号float类型的取值范围,实际就是把对应有符号float类型中的负数部分砍掉了,因此float(4,2)的取值范围为0~99.99

还有一个问题要注意,float类型会精度丢失问题
在这里插入图片描述

2.3.2 decimal类型

语法:

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

decimal和float很像,但是有区别:float和decimal表示的精度不一样

测试精度

创建一个表,表当中分别包含一个float(10,8)的列和一个decimal(10,8)的列
在这里插入图片描述
向表当中插入数据,查表结果float则会存在一定的精度损失,decimal则没有
在这里插入图片描述

decimal的精度更准确,因此如果我们希望某个数据表示高精度,可以选择decimal

2.4 字符串类型

2.4.1 char类型

语法:

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

测试:

创建一个表,表当中包含一个char(2)列
在这里插入图片描述
插入数据,需要注意的是,在MySQL里,这里所说的字符并不与C/C++里面的字符相同,在MySQL里一个汉字也是一个字符

在不同编码中,一个字符所占的字节个数是不同的,比如utf8中一个字符占3个字节,而gbk中一个字符占2个字节
在这里插入图片描述

2.4.2 varchar类型

语法:

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

测试:

创建一个表,表当中包含一个varchar(2)
在这里插入图片描述
插入数据,varchar在这与char没什么区别
在这里插入图片描述

varchar类型注意事项

关于varchar(len),len到底是多大,这个len值,和表的编码密切相关:

在这里插入图片描述
在这里插入图片描述

2.4.3 char和varchar比较

char和varchar比较

以utf8编码为例:
在这里插入图片描述

如何选择定长(char)或变长字符串(varchar)?

2.5 时间日期类型

常用的日期有如下三个:

创建一个表,表当中包含date、datetime和timestamp三种时间日期类型的列

查看表结构可以看到,timestamp类型的t3列是不允许为空的,它的默认值为CURRENT_TIMESTAMP

如果向表中插入数据,t3会自动更新到最新时间(无需手动插入)
在这里插入图片描述
向表中插入值
在这里插入图片描述
更新数据,时间戳会更新
在这里插入图片描述

2.6 enum和set

enum:枚举,“单选”类型;

enum('选项1','选项2','选项3',...);

set:集合,“多选”类型:

set('选项值1','选项值2','选项值3', ...);

注意:不建议在添加枚举值,集合值的时候采用数字的方式,因为不利于阅读

例子

创建一个调查表,表当中包含被调查人的姓名、性别(只选一个)和爱好(多个)
在这里插入图片描述
向表中插入记录时,被调查人的性别只能从男和女中进行二选一,被调查人的爱好可以从提供的若干个选项中进行多选一或多选多,多个爱好之间需要通过英文逗号隔开
在这里插入图片描述

可以通过数字设置enum

数字是从1开始,有几个值数字最大就是几,例如enum(‘男’, ‘女’),数字1代表男,数字2代表女,最大就是2,超过了范围则不允许插入
在这里插入图片描述
根本原因在于,MySQL出于效率考虑,这些值(比如男,女)实际存储的是“数字”,因为这些选项的每个选项值依次对应如下数字:1,2,3,....,最多65535

可以通过数字设置set

在插入记录时,除了通过指明多个选项来设置爱好,还可以通过数字的方式来设置
使用数字插入并不是使用下标,使用的是位图的方式进行插入
例如:

'羽毛球','游泳','篮球','写代码' // 4个爱好用比特位表示:00000001 (1)是羽毛球0010 (2)是游泳0011 (3)是羽毛球,游泳0100 (4)是篮球依次类推1111 (15)则是'羽毛球','游泳','篮球','写代码'

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
:虽然enum和set可以通过数字的方式进行设置,但严重不推荐这种做法,因为这样的SQL可读性太差

enum和set查找

如果想要筛选出调查表中的所有女的或男的,那么直接在筛选时指明gender='女'或者gender='男'即可
在这里插入图片描述
但如果要筛选出调查表中爱好包含游泳的就不能使用where了,这并不是我们想要的结果
在这里插入图片描述

集合查询使用find_ in_ set函数:

在这里插入图片描述
--------------------- END ----------------------

「 作者 」 枫叶先生「 更新 」 2023.7.17「 声明 」 余之才疏学浅,故所撰文疏漏难免,          或有谬误或不准确之处,敬请读者批评指正。

来源地址:https://blog.csdn.net/m0_64280701/article/details/131742354

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     801人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     348人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     311人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     432人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     220人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯