《MySQL数据类型》

文章目录

  • 一、理解数据本身就是一种约束
    • 1.tinyint类型和 tinyint unsigned类型
    • 2.其他的int类型
  • 二、bit类型
  • 三、float类型
    • 1.signed版本
    • 注意
    • 2.unsigned版本
  • 四、decimal类型
  • float 和 decimal 总结
  • 五、char类型(固定长度)
  • 六、varchar类型(可变长度)
    • 总结
  • char和varchar比较
  • 七、日期和时间类型
  • 八、enum和set类型
    • enum
    • set
    • 总结
    • enum和set的类型查找


一、理解数据本身就是一种约束

1.tinyint类型和 tinyint unsigned类型

在这里插入图片描述
先创建表t1

create table if not exises t1(
num tinyint
);
表中只有一个字段tinyint
在这里插入图片描述

向num字段中添加数据:

insert into t1 values(-1);

在这里插入图片描述

然而,当我们插入256时:

在这里插入图片描述
出现了错误
意味着数据库不允许我们插入不合法数据。
反之,插入的一定是合法的数据!!!

所以一般而言,数据本身就是一种约束!!!

约束程序员,尽可能正确地插入数据。
就算你不是一个很好的程序员,Mysql也能保证数据的合法性。

2.其他的int类型

在这里插入图片描述

二、bit类型

创建一个表时,如下:
在这里插入图片描述
向表中插入一些数据后,如下:

在这里插入图片描述
问题是:为什么online字段没有任何显示呢?

只需执行如下命令就能显示了:

select id , hex(online) from t1;
(以十进制的方式显示)

在这里插入图片描述

同时也可以修改online字段的大小:

alter table t1 modify online bit(10);
在这里插入图片描述

三、float类型

1.signed版本

在这里插入图片描述
比如salary float(4,2);

表示允许承装的最多位数是4位(总长度,包含整数部分和小数部分),小数点后最多占两位。

那插入的salary(工资)最大就是:99.99

由于在建表时,salary类型没有设置成unsigned类型,所以可以插入负数,但实际生活中没有负数的工资吧。。。

注意

小数:float(4,2)表示的范围是-99.99 ~ 99.99,MySQL在保存值时会进行四舍五入。

比如要插入一个数:

insert into t2(id ,salary) values(1,99,991);

是会插入成功的,因为在小数点部分,会进行四舍五入,将1舍去。
但是当插入下面的数据时,就不行:

insert into t2(id, slary) values(2,99.996);

因为一旦最后一个小数位进位后,数据就超出了-99.99~99.99的范围。

2.unsigned版本

如果把float设置成unsigned版本,那么取值范围就相当于把负数部分直接丢掉。

比如:定义一个表时,把float设置成float(4,2) unsigned

那取值范围就是:0~99.99

总结:1.一般情况下,默认的float,不指定位数的情况下,可容纳数据位数是比较大的,跟不同的平台设计也有关。
2.有一些情况,存储的浮点数类型比较大时,会出现精度丢失的问题。
在这里插入图片描述

四、decimal类型

该decimal类型,与float类型基本一样,区别在于decimal能更精确控制浮点数,确保不会丢失。

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

float 和 decimal 总结

说明:float表示的精度大约是7位。
decimal整数最大位数m为65。支持小数最大位数d是30。如果d被省略,默认为0.如果m被省略,
默认是10。
建议:如果希望小数的精度高,推荐使用decimal。

五、char类型(固定长度)

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

比如:name char(2),表示放的最大长度的字符串是2;

注意:在MySQL中,一个汉字表示一个字符!
在这里插入图片描述

六、varchar类型(可变长度)

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

在修改varchar的最大类型的长度时,发现最大字符长度是 21845,
这个是字符的长度,由于采用utf8编码,一个字符3个字节。

21845*3 = 65535

在这里插入图片描述

总结

但是,当我修改到21845时,同样不可以。

原因是:varchar(6),表示的是字符的使用上限是6,而不是一次固定分配6个字符大小的空间。

当只使用1个字符的空间时,varchar实际上只会分配一个字符大小的空间。所以,就需要有1~3个字节位,来记录所使用的空间有多少。
而char类型不同,char类型是直接一次给指定的空间,不管用没用完,都给那么多。

说明:

  • 关于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字节)。

char和varchar比较

在这里插入图片描述

在这里插入图片描述

七、日期和时间类型

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

创建一个表,如下:

create table if not exists t7(
-> d date,
-> dt datetime,
-> ts timestamp
-> );

首先插入一个数据:
在这里插入图片描述
时间戳timestamp就是当前的最新时间。

然后,修改d,如下:
在这里插入图片描述
发现时间戳ts改变了,变成了最新的时间。

时间戳(timestamp)存在的意义:
实际生活中的社交软件,视频下面会有评论,当一个人发表评论时,会被所有人看到,并且附带发表评论时的时间。

过了几个月,当这个人修改它发表过的评论时,时间会自动更新成当前时间!
这就能让所有人知道,该评论何时被评论的,何时被修改的。

datetime存在的意义:
入职的时间,固定在那里,或者办理身份证的时间,固定在那个时间,什么日期,几时几分几秒,一般不会自动更新。

date存在的意义:
比如记录一个重要的人的生日,比如你自己的生日。

八、enum和set类型

enum

enum类型:枚举
在插入时,可以直接插入枚举类型定义的常量,也可以直接插入枚举常量的下标。(这里的下标从1开始)

比如:创建一个表如下:

create table if not exists t8(
-> name varchar(30),
-> gender enum(‘男’,‘女’),
-> hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)
-> );

可以这样插入:

  • insert into t8 values(‘张飞’,‘男’,‘代码’);

还可以这样插入:

  • insert into t8 values(‘孙权’,1,‘代码’);

结果如下:1就代表枚举常量中的下标,在此1表示男,2表示女。
在这里插入图片描述

set

set的选择可以按照位图来。

以上面的表为例,

hobby set(‘代码’,‘羽毛球’,‘乒乓球’,‘足球’,‘游泳’)

一共有五个爱好,那么位图就有5个比特位,为1时表示选择该爱好。

所以可以这样插入数据:

  • insert into t8 values(‘孙权’,1,31);
    31的二进制就是:11111,就会让上面set位图的5个比特位全部置1。
    如果是这样插入:
    insert into t8 values(‘孙权’,1,7);
    7的二进制是:00111,代表将前3个比特位置1。
    而前三位就是set的从左到右开始计算的。
    所以爱好为:‘代码’,‘羽毛球’,‘乒乓球’。

总结

enum用数字来插入时,指代下标。
set用数字来插入时,指代位图,set的从左到右代表从小到大。

enum和set的类型查找

法1:

select * from votes where gender=1;
select * from votes where gender=‘男’;
上面两种写法等价。

根据特定的类型查找,比如按性别查找。

法2:
find_in_set 函数

select find_in_set(‘a’,‘a,b,c’);

  • 1.find_in_set 函数是查找一个元素是否在集合里面。
  • 2.判断一个元素是否在集合中,而不是判断是否严格相等。

所以,查找hobby是否有羽毛球时,是判断羽毛球是否在每一个用户中的。
在这里插入图片描述

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

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

相关文章

【跟马少平老师学AI】-【神经网络是怎么实现的】(四)卷积神经网络

一句话归纳: 1)用1个小粒度的模式,逐个与图像的局部区域进行运算,运算结果反映模式与区域的匹配程度。 2)卷积神经网络与全连接神经网络的区别: 卷积神经网络的输出只与局部输入有连接。参数较少&#xff0…

N9048B PXE EMI 测试接收机,1 Hz 至 44 GHz

​ _EMI_ N9048B EMI 测试接收机 1 Hz 至 44 GHz Keysight N9048B PXE 是一款符合标准的 EMI 测试接收机,配有射频预选器和 LNA 设计。其实时扫描(RTS)功能有助于您缩短总体测试时间,轻松执行无间隙的信号捕获和分析。 特点 …

宏电全栈式IoT赋能供排水智能监测,护航城市生命线

城市供水、排水系统是维系城市正常运行、满足群众生产生活需要的重要基础设施,是城市的“生命线”。随着城市化进程加快,城市规模不断扩大,地下管线增长迅速,城市“生命线安全”的监管日益面临挑战。 宏电作为物联网行业的领航者…

Docker本地部署overleaf后,挖掘用户加密逻辑

overleaf的用户信息,保存在mongo数据库的users集合中。 用户密码则存在hashedPassword字段中 从开源的代码services\web\app\src\Features\Authentication\AuthenticationManager.js第303行可以找到密码加密逻辑。 本地可以通过下面的代码生成overleaf用户密码信息…

408数据结构-树与森林 自学知识点整理

前置知识:树的基本概念与性质 树的存储结构 树既可以采用顺序存储结构,又可采用链式存储结构。但无论采取哪种方式,都要求能够唯一地反映树中各结点之间的逻辑关系。 1. 双亲表示法 这种存储结构采用一组连续空间来存储每个结点&#xff0…

JetPack之ViewModel+LiveData

目录 一、概述二、LiveData 使用2.1 创建 LiveData 对象2.2 观察 LiveData 对象2.3 更新 LiveData 对象 三、编写 LiveData Demo3.1 不使用 LiveData3.2 使用 MutableLiveData3.3 使用 MediatorLiveData3.3.1 监听 2 个数据源的变化3.3.2 编写模拟 2 个数据源更新的代码 四、Vi…

java中如何判断一个数是不是素数(质数)

相关概念 质数就是大于1的自然数字中&#xff0c;只能被1和它自己整除的数。 题目 求101~200之间的质素的个数 代码实现 判断一个数是不是质数 for (int j 2; j < i; j) {if(i % j 0){flag false;break;}}if(flag){System.out.println("当前数字是质数");…

Unity 性能优化之遮挡剔除(Occlusion Culling)(六)

提示&#xff1a;仅供参考&#xff0c;有误之处&#xff0c;麻烦大佬指出&#xff0c;不胜感激&#xff01; 文章目录 前言一、遮挡剔除是什么&#xff1f;二、静态遮挡剔除的使用步骤1.标记为遮挡剔除对象2.创建Occlusion Area组件3.烘焙4.Occlusion窗口Bake的参数Smallest Oc…

电子书制作神器,简单操作

​随着数字化时代的到来&#xff0c;电子书籍越来越受到人们的喜爱。而一款优秀的电子翻页书制作软件&#xff0c;则能够帮助你轻松制作出专业级的电子书&#xff0c;让你的阅读体验更加丰富多彩。 今天&#xff0c;我们就来为大家推荐一款优秀的电子翻页书制作软件——FLBOOK在…

全球260多个国家的年通货膨胀率数据集(1960-2021年)

01、数据简介 全球年通货膨胀率是指全球范围内&#xff0c;在一年时间内&#xff0c;物价普遍上涨的比率。这种上涨可能是由于货币过度供应、需求过热、成本上升等原因导致的。通货膨胀率是衡量一个国家或地区经济状况和物价水平的重要指标&#xff0c;通常以消费者价格指数&a…

Flutter笔记:Widgets Easier组件库(12)使用消息吐丝(Notify Toasts)

Flutter笔记 Widgets Easier组件库&#xff08;12&#xff09;使用消息吐丝&#xff08;Notify Toasts&#xff09; - 文章信息 - Author: 李俊才 (jcLee95) Visit me at CSDN: https://jclee95.blog.csdn.netMy WebSite&#xff1a;http://thispage.tech/Email: 29114848416…

如何全面规避医疗数据安全风险?“一中心三大管控域”打开新思路!

作为医院的核心基础设施&#xff0c;数据库已然演变成了一种具有“资产”属性的重要元素。而随着不断变化的医疗业务场景和日趋严格的合规性要求&#xff0c;如何让安全全方位贯穿医疗数据的生命周期&#xff0c;是一项系统性的建设工作&#xff0c;难点诸多。 基于多年的数据…

Vue前端环境准备

vue-cli Vue-cli是Vue官方提供的脚手架&#xff0c;用于快速生成一个Vue项目模板 提供功能&#xff1a; 统一的目录结构 本地调试 热部署 单元测试 集成打包上线 依赖环境&#xff1a;NodeJs 安装NodeJs与Vue-Cli 1、安装nodejs&#xff08;已经安装就不用了&#xff09; node-…

Linux字符设备驱动(二) - 与设备驱动模型的关系

一&#xff0c;从/dev目录说起 从事Linux嵌入式驱动开发的人&#xff0c;都很熟悉下面的一些基础知识&#xff0c; 比如&#xff0c;对于一个char类型的设备&#xff0c;我想对其进行read wirte 和ioctl操作&#xff0c;那么&#xff1a; 1&#xff09;我们通常会在内核驱动中…

tomcat-以服务的方式重启tomcat

背景 双击tomcat的bin目录下面的startup.bat&#xff0c;会留下一个cmd的窗口&#xff0c;很不优雅 使用service服务的方式启动&#xff0c;并且设置为自动启动 找到tomcat的bin目录输入cmd&#xff0c;按Enter&#xff0c;进入命令行界面。执行“service.bat install” 。&…

文件删了,回收站清空了怎么恢复?文件恢复软件一览

在日常生活和工作中&#xff0c;我们常常会遇到误删除文件的情况&#xff0c;有时甚至会因为清空了回收站而无法找回这些文件。这些文件可能包含重要的工作数据、个人照片或其他珍贵的回忆。那么&#xff0c;在这种情况下&#xff0c;我们该如何恢复这些被删除且清空回收站的文…

【项目分享】用 Python 写一个桌面倒计日程序!

事情是这样的&#xff0c;我们班主任想委托我做一个程序&#xff0c;能显示还有几天考试。我立即理解了这个意思&#xff0c;接下了这个项目。 话不多说&#xff0c;来看看这个项目吧—— 项目简介 仓库地址&#xff1a;https://gitee.com/yaoqx/desktop-countdown-day 这是 …

为何美国多IP服务器搭建蜘蛛池SEO更经济?

为何美国多IP服务器搭建蜘蛛池SEO更经济? 随着网络时代的不断演进&#xff0c;搜索引擎优化(SEO)已经成为企业和个人提升网站曝光度的必经之路。在这个过程中&#xff0c;蜘蛛池(Spider Pool)服务被广泛应用。但是有趣的是&#xff0c;美国多IP服务器搭建蜘蛛池SEO服务却相对…

计算机网络-ICMPv6基础概念

前面我们学习了IPv6的基础概念以及IPv6地址的格式与分类&#xff0c;在IPv4中我们通过ARP、广播、ICMP进行地址冲突检测、网络连通性&#xff0c;但是在IPv6中是没有广播和ARP的&#xff0c;都是通过ICMPv6来实现其功能&#xff0c;所以这里我们需要了解下ICMPv6。 一、ICMP协议…

一个基于ComfuUI Api的 AIGC自动绘画实现方案

工作流程图 基本原理已经弄通&#xff0c;下一步要开始编码搬砖了。整个自动绘画的流程如下&#xff0c;暂就不整高深U什么L了&#xff0c;写个简单明了能容易看懂的流程图。UI借用了下墨刀里的AI绘画公开原型 部署节点 整个系统的后端服务典型部署需要3类节点 Aigc Server&…