直击面试现场:你对MySQL的数据类型了解有多少?

news/2024/11/30 12:39:39/

前言

隔着玻璃门,看着面试官缓缓走来,头上飘着几根白发,在行走中随风摇曳,看的让人有一种想帮他薅下来的冲动。

这次面试的岗位是数据库数据类型,面试官坐下来冲着面试者沐风晓月呵呵一笑, “来啦”!

虽是简单的两个字,但还是让晓月感觉到一丝震慑,仿佛一股真气扑面而来。

此人功力不浅,晓月把简历递了上去:“你好面试官,我是来面试的,这是我的简历”

面试官没有接简历,只是轻轻点了下头,示意晓月把简历放到桌子上,缓缓道“你的情况我基本了解了,一面的面试官都已经给我说了,不知道你对数据库了不了解,比如你对MySQL数据类型了解多少。”

晓月松了一口气,多亏来面试的时候看过,内心竟然有一些窃喜,自从穿越到这个星球以来,晓月第一次感觉到如此放松。

接着晓月起身,拉过白板,根据上一世对数据库的记忆,开始阐述他对数据类型的理解

一. 关于MySQL数据类型

在官网上MySQL支持将近39种数据类型,常用的大致可以分为三类:数值、日期/时间和字符串(字符)类型。

1. 数值类型

数值类型就包含了整数类型和浮点数类型:

关于数值类型,我在这里画了一个表:

在这里插入图片描述
这里的有符号和无符号在MySQL中用于定义数值型数据类型的范围。 他们之间有如下区别:

  • 有符号(Signed):有符号的数值类型可以表示正数、负数和零。这意味着你可以在有符号数值类型中存储正数和负数的值,包括零。例如,有符号的 TINYINT 类型可以存储范围从 -128 到 127 的值,其中负数和零也是有效的。
  • 无符号(Unsigned):无符号的数值类型只能表示非负数(即正数和零),不能存储负数的值。无符号类型扩展了数据类型的上限,因为它们不需要一个位表示符号。例如,无符号的 TINYINT 类型可以存储范围从 0 到 255 的值。

比如tinyint 类型, 占一个字节,有符号-128到127 无符号位 0-255
如果一个人的年龄是0-100 ,理论上就可以使用tinyint 无符号范围,0-255 足够用了, 而且占得字节数比较少。

我们来看一个例子,晓月在白板上写道:

# 创建一个表tab1 ,设置三个不同类型的字段
mysql> create table tab1(t1 TINYINT, t2 SMALLINT,t3 BIGINT);
Query OK, 0 rows affected (0.04 sec)mysql> DESC tab1;
+-------+----------+------+-----+---------+-------+
| Field | Type     | Null | Key | Default | Extra |
+-------+----------+------+-----+---------+-------+
| t1    | tinyint  | YES  |     | NULL    |       |
| t2    | smallint | YES  |     | NULL    |       |
| t3    | bigint   | YES  |     | NULL    |       |
+-------+----------+------+-----+---------+-------+
3 rows in set (0.01 sec)# 当插入数值超过的数据类型的范围就会报错。mysql> insert into tab1(t1) values(-128),(127),(12),(356);
ERROR 1264 (22003): Out of range value for column 't1' at row 4
mysql> 

可以看到,这里的356,就已经超出了范围,所以直接提示超出了范围。

2. 日期和时间类型

在这里插入图片描述

DATE:用于存储日期值,格式为’YYYY-MM-DD’。
示例:‘2021-09-15’
TIME:用于存储时间值,格式为’HH:MM:SS’。
示例:‘12:30:45’
DATETIME:用于存储日期和时间值,格式为’YYYY-MM-DD HH:MM:SS’。
示例:‘2021-09-15 12:30:45’
TIMESTAMP:用于存储日期和时间值,格式为’YYYY-MM-DD HH:MM:SS’。与DATETIME相似,但它在插入或更新时自动设置为当前时间戳。
示例:‘2021-09-15 12:30:45’
YEAR:用于存储年份值,格式为’YYYY’。
示例:‘2021’
INTERVAL:用于表示时间间隔的数据类型,可以用于执行日期和时间操作。
示例:INTERVAL ‘5’ DAY,表示5天的时间间隔。

在一个秒杀活动中,可以使用时间类型来记录和处理活动的开始时间、结束时间以及参与者的下单时间。以下是一个使用时间类型的示例:
seckill_activity 表用于存储秒杀活动的信息

MySQL [school]> create table seckill_activity(-> id int ,-> name varchar(50),-> start_time DATETIME,-> end_tim DATETIME-> );
Query OK, 0 rows affected (0.01 sec)

3. 字符串类型

在这里插入图片描述

MySQL [mufenggrow]> create table users(-> id int,-> name varchar(50),-> email varchar(100)-> );
Query OK, 0 rows affected (0.00 sec)MySQL [mufenggrow]> INSERT INTO users (id, name, email)-> VALUES (1, 'John Doe', 'john@example.com'),->        (2, 'Jane Smith', 'jane@example.com');
Query OK, 2 rows affected (0.01 sec)
Records: 2  Duplicates: 0  Warnings: 0MySQL [mufenggrow]> 

当然如果要总结下的话,可以做个思维导图:

在这里插入图片描述

二. 面试官提问环节

当沐风晓月讲解完后,面试官轻轻地微笑了一下,随后轻轻点了点头,示意晓月坐下后,缓缓道:“接下来我问你几个问题”。

1. char 和varchar的区别是什么?

答: 从三个方面来说:

  • 存储方式:CHAR类型是固定长度的,它会分配固定大小的存储空间,无论实际存储的字符串长度是多少,都会占用固定的空间。而VARCHAR类型是可变长度的,它只会分配实际存储的字符串长度所需的空间,不会浪费额外的空间。

  • 适用场景:由于CHAR类型是固定长度的,适合存储长度固定的字符串,例如存储邮政编码或电话号码等。而VARCHAR类型适合存储长度不固定的字符串,例如存储用户的姓名或地址等。

  • 存储效率:由于CHAR类型在存储时会占用固定的空间,所以对于读取和存储固定长度的字符串来说,它的效率通常会稍微高一些。而对于长度不固定的字符串来说,VARCHAR的存储效率会更高,因为它只分配实际需要的空间,不浪费额外的存储空间。

另外:

1.char(n) 若存入字符数小于n,则以空格补于其后,查询之时再将空格去掉。所以char类型存储的字符串末尾不能有空格,varchar不限于此。

2.char(n) 固定长度,char(4)不管是存入几个字符,都将占用4个字节,varchar是存入的实际字符数+1个字节(n<=255)或2个字节(n>255),

所以varchar(4),存入3个字符将占用4个字节。

区别如图:
在这里插入图片描述

2. 浮点型有哪些?

答: 浮点型主要有 float,double 两个,浮点型在数据库中存放的是近似值,例如float(6,3),如果插入一个数123.45678,实际数据库里存的是123.457,但总个数还以实际为准,即6位,整数部分最大是3位。

当然浮点型float 和 double 平时用的不太多。

在这里插入图片描述

3. MySQL数据类型的选择上你有什么建议

答: 当一个列可以选择多种数据类型时, 应该优先考虑数字类型, 其次是日期或者二进制类型, 最后才是字符类型. 对于相同级别的数据类型, 应该优先选择占用空间小的数据类型

数字类型> 日期或二进制类型 > 字符类型

面试官看着滔滔不绝的晓月,按了暂停键,眉宇间带着微笑,仿佛要把晓月收为弟子一样, “回答的很好,我们今天先到这吧,另外我把这本云原生成长手册的武林绝学送给你,回去之后一定要仔细研读”

“好的,谢谢面试官”,晓月接过书来,道谢后,召唤来七彩祥云,从窗户飘然而去。

总结

晓月回到家,喜忧参半, 喜的是总算能答对一次面试了,忧的是云原生领域技术栈这么多,自己刚刚穿越而来,学起来也有些吃力,算了先睡一觉吧,回头把面试官提的几个问题发到博客,也算对知识的一种总结嘛


http://www.ppmy.cn/news/481346.html

相关文章

[转]Android TV 遥控器适配

文章目录 一、常用命令介绍二、红外遥控器适配 2.1 海思红外遥控器适配2.2 Amlogic红外遥控器适配2.3 Mstar红外遥控器适配三、蓝牙遥控器适配 3.1 蓝牙键值3.2 kl3.3 Android键值 一、常用命令介绍 在目前的机顶盒市场中&#xff0c;海思和Amlogic&#xff08;之前还有Mstar&a…

基于STC15W408AS单片机的陀螺仪显示器设计

提示&#xff1a;本文属于技术的交流&#xff0c;如有抄袭请联系删除。 文章目录 前言一、STC15W408AS单片机二、总体设计1.硬件设计(1)原理图设计a.MCU设计b.传感器接口设计c.液晶显示d.电源e.总体图样 (2)PCB设计a.2D绘制展示&#xff08;顶层和底层&#xff09;b.3D绘制展示…

RK3568 Android12 红外遥控器待机唤醒问题

Platform: RK3568 OS: Android 12 Kernel: v4.19.206 SDK Version&#xff1a;android-12.0-mid-rkr1 Module: suspend 问题 红外遥控器待机后无法唤醒&#xff0c;只能用板载电源键唤醒&#xff0c;但是唤醒后红外遥控不能操作 解决方案 dts中如下配置&#xff1a; &v…

STM32F103+NRF2401+游戏摇杆ADC双单片机通信遥控小车

STM32F103NRF2401游戏摇杆ADC双单片机通信遥控小车 文章目录 STM32F103NRF2401游戏摇杆ADC双单片机通信遥控小车前言 一、实现的功能&#xff1f;二、主要代码及模块讲解1.主要代码2.RX&#xff08;接收端&#xff09; demo总体分析和代码部分解读PWM驱动部分游戏摇杆ADC部分NR…

正点原子MiniFly遥控器V1.1—电路图原理分析

MiniFly 遥控器系统框架&#xff1a; STM32F103C8T6 作为控制 MCU&#xff0c; 外围硬件主要有蓝色 0.96 寸 OLED、 NRF24L01、 RF 功率放大、 2.4G 天线、 摇杆、按键、 蜂鸣器、 LED 等。 1&#xff0c;MCU STM32F103C8T6&#xff1a; 32-bit Cortex-M3 内核芯片&#xff0c…

【GESP】2023年03月图形化一级 -- 问路

文章目录 问路1. 准备工作2. 功能实现3. 设计思路与实现&#xff08;1&#xff09;角色、舞台背景设置a. 角色设置b. 舞台背景设置 &#xff08;2&#xff09;脚本编写a. 角色&#xff1a;Averyb. 角色&#xff1a;Dee 4. 评分标准 问路 1. 准备工作 &#xff08;1&#xff09…

大疆开发板A型基于HAL库使用RoboMaster 遥控器(DT7DR16)及Debug在线调试

资料官网&#xff1a;RoboMaster 机甲大师赛 1.查看开发板A型芯片资料 2.查看遥控器用户手册 3.查看开发板A型DBUS接口说明 4.查看DBUS参数&#xff08;配置STM32CubeMX需要&#xff09; 5.配置STM32CubeMX 1&#xff09;新建new project&#xff0c;选择开发板A型芯片型号 …

【Android】蓝牙设备--游戏手柄作为遥控门铃工具试验

在之前的讨论中&#xff0c;考虑了app间通过发起连接提示&#xff0c;来实现类似的门铃提醒功能&#xff0c; 【Android】蓝牙门铃的实现--蓝牙设备的扫描_aaajj的博客-CSDN博客 但是app的操作不如按钮操作方便&#xff0c; 利用蓝牙手柄的connect广播&#xff0c;我们可以把…