当前位置:网站首页>【MySQL功法】第3话 · MySQL中常见的数据类型
【MySQL功法】第3话 · MySQL中常见的数据类型
2022-07-31 07:43:00 【m0_67402564】
**??**写在前面
最近读到一段话,感触颇深,于是打算在这篇正文之前略提一二,这句话是这么说的:**所有的成功,都是快乐的结果,而不是快乐的原因。**你做让自己快乐的事情,你才容易成功;你能做让自己快乐的事情,你就成功了。所以我想,可能现在的我并没有获得什么大成功,但我很快乐,那就让成功慢悠悠地到来吧。kiko愿望与各位一起,一同前行。
言归正传,本章内容主要介绍了MySQL中的常见数据类型,快速理解后可以便于日后的记录操作!
目录
??5.3.3?text / longtext(4G) / blob / longblob(4G) 型
**??**知识点5:MySQL的常见数据类型
MySQL的常见数据(注意是常见,这里没有介绍完整)类型主要有以下四大类,分别为数值类型、字符类型、枚举类型和日期时间类型。在学习过程中,我们需要掌握合适的用法,在实际设计时,去选择合适的数据类型进行存储数据,从而节约存储空间。
??5**.1整型**
??5.1.1 四类整型
整型类型还能进一步继续分为四类(可以去和学过的最基本的C语言进行类比),如下表所示,不知各位有无注意细节,我将第一列加粗表示,此处将第一列作为该表的主键啦!
数据类型
内存占用
无符号取值范围
有符号取值范围
int(大整型)
4字节
tinyint(微小整型)
1字节
0~255
-128~127
smallint(小整型)
2字节
bigint(极大整型)
8字节
我们不难发现MySQL中的int型也存在有符号与无符号之分,那么在程序编写时具体有什么语法格式区别呢?我们来实操一下:
#建一个《简单信息表》 create table nt1( age tinyint unsigned, id int, )ENGINE=InnoDB DEFAULT CHARSET=utf8;
我们在上面程序中定义_age字段_为无符号的微小整型,将id字段定义为有符号的大整型。可以发现,如果我们在数据类型的后边不额外加上_unsigned_,例如上面的 id int,系统将会默认在_int_后加一个_signed_以表示_id_字段是有符号的。
??5.1.2 图形化创建表
在这里,我们再介绍一种图形化界面创建表的方法,通过鼠标点击的方式去创建一个表:
**step1.**首先选中一个数据库进入,比如我这里选择的就是kiko这个数据库,然后点击【表】——>【新建表】。
**step2.**通过点击表格与选中输入的方式,如果要输入多行数据,可以单击【添加字段】然后进行设置,当设置完各字段的数据类型后(如下图),点击【保存】,此时会跳出一个框,我们在框中输入这个表的名字,这里命名为nt1。
**step3.**这时我们可以在左边状态栏中找到我们刚刚建立的nt1表,我们在表格中输入一些值,来检测一下无符号tinyint型的age字段,输入完毕后按【ctrl+s】保存。
我是分割线
??5**.2浮点型**
??5.2.1float型
用法:字段名 float(m,n) m:总位数(整数位位数+小数位位数) n:小数位位数
**存储空间:**4字节
**取值范围:**我们举个例子,比如我们想要在上面表格中添加一个score字段,将它设置为 float(5,2),其中5表示这里一共5位数,2表示小数位位数占2位,可以存储一个 -999.99 ~ 999.99的值,这个范围完全包括了正常考分的范围,因此可以满足要求。
**致命缺陷:**float从左到右最多显示7个有效位(整数位+小数位),因此我们在定义时,m的最大赋值为7;我们同样可以通过一个例子清晰理解:
??5.2.2****decimal型
用法:字段名 decimal(m,n) m:总位数(整数位位数+小数位位数) n:小数位位数
**显示限制:**最多可以从左到右显示28个有效位(包括整数位和小数位)。
**存储空间:**整数部分与小数部分分开存储,存储空间 = 整数部分所占字节数 + 小数部分所占字节数,其中关于字节数的计算是由专门算法进行计算。
关于浮点型内容的注意点:
(1)浮点型插入整数时会自动补全小数位位数;
(2)小数位多于指定的位数时,会对下一位进行四舍五入的操作;我们可以沿用上边的score字段进行检测,由于score字段指定了小数位位数为2,因此我们在表格中输入一个3位小数,一起看看其最终的结果如何把!
我们发现超出位数的小数自动四舍五入了,即将超出的第三位小数9四舍五入给了2,使其变为3。
我是分割线
??5**.3字符型**
??5.3.1char型
用法:char(定长) 宽度取值范围:1 ~ 255(若不指定宽度,则默认宽度为1,存储1个字符)
??5.3.2varchar型
用法:varchar(变长) 宽度取值范围:1 ~ 65535(必须指定宽度,无默认宽度值)
Q1:char和varchar有什么区别吗?
**A1:**最明显的区别应当是它们在存储数据时的区别,比如我们为char和varchar的宽度都设置为10,这时假如我们在这里存储一个字符时,char会在字符后面补9个空格,而varchar则不补空格,就占字符长度的空间。
于是我们就得到了_char_和_varchar_的一些不同点:
- _char_放入小于指定宽度的字符时,会自动在字符后面补充空格;因此_char_类型浪费存储空间,但是性能高,这是因为开辟空间是按设定开辟,如上例中直接就开辟10个空间。
- _varchar_放入小于指定宽度的字符时,不补空格,就占字符长度的空间;因此_varchar_类型节省存储空间,但是性能低,这是因为_varchar_会专门计算一下存储字符的长度,所以是在用时间换空间。
当然_char_和_varchar_也是有相同点的,那就是当输入字符超出指定宽度,都会存储失败。
??5.3.3text / longtext(4G) / blob / longblob(4G) 型
用法:存储文本,无需指定宽度。
我是分割线
??5**.4枚举类型**
??5.4.1单选类型
用法:字段名 enum (值1,值2,····) 规则:只能选择其中某一个值。
当我们在设置一个人的性别时,这就是一个单选类型,就可以使用enum类型,如下图操作所示:
??5.4.2多选类型
用法:字段名 set (值1,值2,····) 规则:可以选择其中一个值或者同时选择多个值。
比如我们在设置一个人的兴趣爱好时,这就可以是一个多选类型,这时我们使用set类型,操作如下图所示:
我是分割线
??5**.5日期时间类型**
??5.5.1时间数据类型
date:" YYYY - MM - DD " (年-月-日) time: " HH : MM : SS " (时:分:秒) datetime: " YYYY - MM - DD HH : MM : SS " (年-月-日 时:分:秒) timestamp: " YYYY - MM -DD HH : MM : SS " (年-月-日 时:分:秒)
Q1:datetime与timestamp类型有什么区别?
**A1:**虽然它们两者都可以返回“年-月-日,时:分:秒”信息,但它们的区别在于其赋值后的状态,其主要区别是:
- **datetime:**不赋值,就会返回NULL空值。
- **timestamp:**不赋值,默认会返回系统当前时间。
??5.5.2日期时间函数
1. now() 返回服务器当前时间 2. curdate() 返回当前日期 3. curtime() 返回当前时间 4. year(date) 返回指定时间的年份 5. date(date) 返回指定时间的日期 6. time(date) 返回指定时间的时间
关于上述函数的一般操作我们可以按照下图自己操作一遍,很简单:
SELECT NOW(); SELECT CURDATE(); SELECT CURTIME(); SELECT YEAR('2022-01-26 12:20:45'); SELECT DATE('2022-01-26 12:20:45'); SELECT TIME('2022-01-26 12:20:45');
??5.5.3日期时间计算
格式:SELECT * FROM 表名 WHERE 字段名 运算符 (时间-INTERVAL 时间间隔单位) (1)运算符: > = < (2)时间间隔单位: 1 day| 2 hour | 1 minute | 2 year | 3 month |···
接下来我们通过一个例子对上面的函数进行讲解,为了讲解方便,我们先在本章创建的表中插入一些数据,这样方便后期函数的使用。关于表记录的插入内容,我们在上一章中已经详细讲过,如果有所遗忘可以点击下方链接前往学习哦!
我们现将表格中各条记录代码放在下面,各位可以直接复制进去进行插入哦!
INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('01','张晓栋','23','70','男','唱歌,跳舞','1997-09-01'); INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('02','蒋粤','22','90','男','跑步','1999-02-25'); INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('03','周琦','23','85','女','弹琴,健身','2000-10-08'); INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('04','宋颖','23','92','男','唱歌,跳舞,跑步','2001-06-07');
例如我们想要查找上表中2000年前出生的学生记录,这时我们就要找到一个时间点,即现在的年份(2022)减去时间间隔22年后的值,birthday的年份时间应当比这个值小,才是2000年前的记录,因此使用“<”。
SELECT * FROM nt1 WHERE birthday < (NOW()-INTERVAL 22 year);
先自我介绍一下,小编13年上师交大毕业,曾经在小公司待过,去过华为OPPO等大厂,18年进入阿里,直到现在。深知大多数初中级java工程师,想要升技能,往往是需要自己摸索成长或是报班学习,但对于培训机构动则近万元的学费,着实压力不小。自己不成体系的自学效率很低又漫长,而且容易碰到天花板技术停止不前。因此我收集了一份《java开发全套学习资料》送给大家,初衷也很简单,就是希望帮助到想自学又不知道该从何学起的朋友,同时减轻大家的负担。添加下方名片,即可获取全套学习资料哦
边栏推荐
猜你喜欢
进程和线程的区别&&run和start区别与联系
R语言 第一部分
关于Error EPERM operation not permitted, mkdir...几种解决办法的比较
2022.07.20_Daily Question
C语言三子棋(井字棋)小游戏
LED flashing on CY7C68013A
【小程序项目开发--京东商城】uni-app之自定义搜索组件(上)-- 组件UI
使用MySQL如何查询一年中每月的记录数
"C language game" entry-level chess game (robot enhanced version)
Environment_Variable_and_SetUID
随机推荐
48页智慧城市规划蓝图 解决方案
Ceph single node deployment
mysql的建表语句_三种常用的MySQL建表语句
正则表达式绕过
MySQL安装教程
PowerCLi 一键批量部署OVA 到esxi 7
MySQL安装到最后一步 write configuration file 失败 怎么办?及后安装步骤
MySQL 5.7升级到8.0详细过程
SQLAlchemy使用教程
关于“算力”,这篇文章值得一看
全国中职网络安全B模块之国赛题远程代码执行渗透测试 PHPstudy的后门漏洞分析
UML图及在drawio中的绘制
Collation and sharing of related classic papers and datasets in the field of deep learning communication
【云原生与5G】微服务加持5G核心网
客户端navicat安装教程
Thread 类的基本用法——一网打尽
动态顺序表的增删查改(C语言实现)
一文搞定代码中的命名
【小程序项目开发--京东商城】uni-app之自定义搜索组件(上)-- 组件UI
SQL 入门之第一讲——MySQL 8.0.29安装教程(windows 64位)