MySQL入门第三话 · MySQL中常见的数据类型
Posted kikokingzz
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL入门第三话 · MySQL中常见的数据类型相关的知识,希望对你有一定的参考价值。
🍺写在前面
最近读到一段话,感触颇深,于是打算在这篇正文之前略提一二,这句话是这么说的:所有的成功,都是快乐的结果,而不是快乐的原因。你做让自己快乐的事情,你才容易成功;你能做让自己快乐的事情,你就成功了。所以我想,可能现在的我并没有获得什么大成功,但我很快乐,那就让成功慢悠悠地到来吧。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.1 float型
用法:字段名 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.1 char型
用法:char(定长) 宽度取值范围:1 ~ 255(若不指定宽度,则默认宽度为1,存储1个字符)
🥝5.3.2 varchar型
用法: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.3 text / 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);
以上是关于MySQL入门第三话 · MySQL中常见的数据类型的主要内容,如果未能解决你的问题,请参考以下文章