• 【MySQL入门】第三话 · MySQL中常见的数据类型


    🍺写在前面


    最近读到一段话,感触颇深,于是打算在这篇正文之前略提一二,这句话是这么说的:所有的成功,都是快乐的结果,而不是快乐的原因。你做让自己快乐的事情,你才容易成功;你能做让自己快乐的事情,你就成功了。所以我想,可能现在的我并没有获得什么大成功,但我很快乐,那就让成功慢悠悠地到来吧。kiko愿望与各位一起,一同前行。

    言归正传,本章内容主要介绍了MySQL中的常见数据类型,快速理解后可以便于日后的记录操作!

    目录

    🍺写在前面

    🍺知识点5:MySQL的常见数据类型

    🍯5.1 整型

    🥝5.1.1 四类整型

    🥝5.1.2 图形化创建表

    🍯5.2 浮点型

    🥝5.2.1 float型

    🥝5.2.2 decimal型

    🍯5.3 字符型

    🥝5.3.1 char型

    🥝5.3.2 varchar型

    🥝5.3.3 text / longtext(4G) / blob / longblob(4G) 型

    🍯5.4 枚举类型

    🥝5.4.1 单选类型

    🥝5.4.2 多选类型

    🍯5.5 日期时间类型

    🥝5.5.1 时间数据类型

    🥝5.5.2 日期时间函数

    🥝5.5.3 日期时间计算

    🍺知识点5:MySQL的常见数据类型


    MySQL的常见数据(注意是常见,这里没有介绍完整)类型主要有以下四大类,分别为数值类型、字符类型、枚举类型和日期时间类型在学习过程中,我们需要掌握合适的用法,在实际设计时,去选择合适的数据类型进行存储数据,从而节约存储空间。

    🍯5.1 整型


    🥝5.1.1 四类整型

    整型类型还能进一步继续分为四类(可以去和学过的最基本的C语言进行类比),如下表所示,不知各位有无注意细节,我将第一列加粗表示,此处将第一列作为该表的主键啦!

    数据类型内存占用无符号取值范围有符号取值范围
    int(大整型)4字节2^{32}-1-2^{31}\sim 2^{31}-1
    tinyint(微小整型)1字节0~255-128~127
    smallint(小整型)2字节2^{16}-1-2^{15}\sim 2^{15}-1
    bigint(极大整型)8字节2^{64}-1-2^{63}\sim 2^{63}-1

    我们不难发现MySQL中的int型也存在有符号与无符号之分,那么在程序编写时具体有什么语法格式区别呢?我们来实操一下:

    1. #建一个《简单信息表》
    2. create table nt1(
    3. age tinyint unsigned,
    4. id int,
    5. )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型

    1. 用法:字段名 float(m,n)
    2. m:总位数(整数位位数+小数位位数)
    3. n:小数位位数

    存储空间:4字节

    取值范围:我们举个例子,比如我们想要在上面表格中添加一个score字段,将它设置为 float(5,2),其中5表示这里一共5位数,2表示小数位位数占2位,可以存储一个 -999.99 ~ 999.99的值,这个范围完全包括了正常考分的范围,因此可以满足要求。

    致命缺陷:float从左到右最多显示7个有效位(整数位+小数位),因此我们在定义时,m的最大赋值为7;我们同样可以通过一个例子清晰理解:


    🥝5.2.2 decimal型

    1. 用法:字段名 decimal(m,n)
    2. m:总位数(整数位位数+小数位位数)
    3. n:小数位位数

    显示限制:最多可以从左到右显示28个有效位(包括整数位和小数位)。

    存储空间:整数部分与小数部分分开存储,存储空间 = 整数部分所占字节数 + 小数部分所占字节数,其中关于字节数的计算是由专门算法进行计算。

    关于浮点型内容的注意点:

    (1)浮点型插入整数时会自动补全小数位位数;

    (2)小数位多于指定的位数时,会对下一位进行四舍五入的操作;我们可以沿用上边的score字段进行检测,由于score字段指定了小数位位数为2,因此我们在表格中输入一个3位小数,一起看看其最终的结果如何把!

    我们发现超出位数的小数自动四舍五入了,即将超出的第三位小数9四舍五入给了2,使其变为3。

     ✨✨✨我是分割线✨✨✨ 

    🍯5.3 字符型


    🥝5.3.1 char型

    1. 用法:char(定长)
    2. 宽度取值范围:1 ~ 255(若不指定宽度,则默认宽度为1,存储1个字符)

    🥝5.3.2 varchar型

    1. 用法:varchar(变长)
    2. 宽度取值范围:1 ~ 65535(必须指定宽度,无默认宽度值)

    Q1:char和varchar有什么区别吗?
    A1:最明显的区别应当是它们在存储数据时的区别,比如我们为char和varchar的宽度都设置为10,这时假如我们在这里存储一个字符时,char会在字符后面补9个空格,而varchar则不补空格,就占字符长度的空间。

    于是我们就得到了charvarchar的一些不同点

    1. char放入小于指定宽度的字符时,会自动在字符后面补充空格;因此char类型浪费存储空间,但是性能高,这是因为开辟空间是按设定开辟,如上例中直接就开辟10个空间。
    2. varchar放入小于指定宽度的字符时,不补空格,就占字符长度的空间;因此varchar类型节省存储空间,但是性能低,这是因为varchar会专门计算一下存储字符的长度,所以是在用时间换空间。

    当然charvarchar也是有相同点的,那就是当输入字符超出指定宽度,都会存储失败。


    🥝5.3.3 text / longtext(4G) / blob / longblob(4G) 型

    用法:存储文本,无需指定宽度。

      ✨✨✨我是分割线✨✨✨

    🍯5.4 枚举类型


    🥝5.4.1 单选类型

    1. 用法:字段名 enum (值1,值2,····)
    2. 规则:只能选择其中某一个值。

    当我们在设置一个人的性别时,这就是一个单选类型,就可以使用enum类型,如下图操作所示:


    🥝5.4.2 多选类型

    1. 用法:字段名 set (值1,值2,····)
    2. 规则:可以选择其中一个值或者同时选择多个值。

    比如我们在设置一个人的兴趣爱好时,这就可以是一个多选类型,这时我们使用set类型,操作如下图所示:

     ✨✨✨我是分割线✨✨✨

    🍯5.5 日期时间类型


    🥝5.5.1 时间数据类型

    1. date:" YYYY - MM - DD " (年--日)
    2. time: " HH : MM : SS " (时:分:秒)
    3. datetime: " YYYY - MM - DD HH : MM : SS " (年--日 时:分:秒)
    4. timestamp: " YYYY - MM -DD HH : MM : SS " (年--日 时:分:秒)

    Q1:datetime与timestamp类型有什么区别?

    A1:虽然它们两者都可以返回“年-月-日,时:分:秒”信息,但它们的区别在于其赋值后的状态,其主要区别是:

    • datetime:不赋值,就会返回NULL空值。
    • timestamp:不赋值,默认会返回系统当前时间。

    🥝5.5.2 日期时间函数

    1. 1. now() 返回服务器当前时间
    2. 2. curdate() 返回当前日期
    3. 3. curtime() 返回当前时间
    4. 4. year(date) 返回指定时间的年份
    5. 5. date(date) 返回指定时间的日期
    6. 6. time(date) 返回指定时间的时间

    关于上述函数的一般操作我们可以按照下图自己操作一遍,很简单:

    1. SELECT NOW();
    2. SELECT CURDATE();
    3. SELECT CURTIME();
    4. SELECT YEAR('2022-01-26 12:20:45');
    5. SELECT DATE('2022-01-26 12:20:45');
    6. SELECT TIME('2022-01-26 12:20:45');


    🥝5.5.3 日期时间计算

    1. 格式:SELECT * FROM 表名 WHERE 字段名 运算符 (时间-INTERVAL 时间间隔单位)
    2. 1)运算符: > = <
    3. 2)时间间隔单位: 1 day| 2 hour | 1 minute | 2 year | 3 month |···

    接下来我们通过一个例子对上面的函数进行讲解,为了讲解方便,我们先在本章创建的表中插入一些数据,这样方便后期函数的使用。关于表记录的插入内容,我们在上一章中已经详细讲过,如果有所遗忘可以点击下方链接前往学习哦!

    【MySQL入门】第二话 · 数据库与数据表的基本操作https://kikoking.blog.csdn.net/article/details/125106100?spm=1001.2014.3001.5502

    我们现将表格中各条记录代码放在下面,各位可以直接复制进去进行插入哦!

    1. INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('01','张晓栋','23','70','男','唱歌,跳舞','1997-09-01');
    2. INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('02','蒋粤','22','90','男','跑步','1999-02-25');
    3. INSERT INTO nt1 (id,name,age,score,sex,hobby,birthday) VALUES ('03','周琦','23','85','女','弹琴,健身','2000-10-08');
    4. 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);

  • 相关阅读:
    Android 命令行工具简介
    【python】pandas 索引操作
    十、补码朴素贝叶斯算法(Complement NB,Complement Naive Bayes)(有监督学习)
    专业技术人员的几种有效的薪酬制度模式
    线性代数 --- 线性代数学习帖总纲
    Mysql和Redis如何保证数据一致性
    基于python高校选课系统设计与实现flask-django-nodejs-php
    unity 实用框架
    Spring注解
    基于java+SpringBoot+HTML+Mysql酒店预订网站
  • 原文地址:https://blog.csdn.net/qq_54151955/article/details/125401775