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

news2024/11/25 1:32:06

前言

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

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

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

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

面试官没有接简历,只是轻轻点了下头,示意晓月把简历放到桌子上,缓缓道“你的情况我基本了解了,一面的面试官都已经给我说了,不知道你对数据库了不了解,比如你对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: 0

MySQL [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.coloradmin.cn/o/666390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

广工击败清华,CGTN Sports 是这样说的

6 月 18 日晚上&#xff0c;被很多人不看好的弱旅广东工业大学&#xff0c;击败了豪门清华大学&#xff0c;拿下 CUBAL 的总冠军。 CGTN Sports Scene 是这样报道的&#xff1a; &#x1f3c6; 1st ever CUBAL championship in school history 校史上第一个 CUBAL 冠军 CUBA…

uniapp——Android 异常: failed to connect to localhost/127.0.0.1

bug解决——携带出现&#xff1a; Waiting to navigate to: /pages/……, do not operate continuously: /pages/…… failed to connect to localhost/127.0.0.1 解决方法&#xff1a; 我的报错&#xff1a;主要是failed to connect to localhost/127.0.0.1引发的Waiting …

【MSP430单片机】MSP430G2553程序,MSP430G2553单片机教程,MSP430G2553实战演练

文章目录 开发环境板子介绍官网示例代码下载MSP430普通IO口控制IO口外部中断MSP430时钟系统MSP430不精确延时之delay_msMSP430定时器_CCR0溢出中断MSP430定时器_定时器计数溢出中断MSP430定时器_PWM波形产生MSP430串口_收发9600波特率115200 波特率 MSP430ADCMSP430 Flash读写 …

数据结构顺序表(C语言实现)

绪论 从本章开始就是开始数据结构的开端&#xff0c;本章将会写出数据结构中的顺序表的代码实现&#xff0c;多会以注释的方法来描述一些细节&#xff08;注释是我们程序员必须常用的工具&#xff09;。 话不多说安全带系好&#xff0c;发车啦&#xff08;建议电脑观看&#xf…

Linux多线程之生产者消费者模型1

目录 &#x1f34a;一、什么是生产者消费者模型 &#x1f34a;二、基于BlockingQueue的生产者消费者模型 &#x1f34a;三、生产消费模型的upgrade版本 &#x1f34a; 四、三线程实现生产消费和存储 &#x1f34a;一、什么是生产者消费者模型 生产者消费者模式就是通过一…

SciencePub学术 | 智能计算类重点SCIEEI征稿中

SciencePub学术 刊源推荐: 智能计算类重点SCI&EI征稿中&#xff01;2区闭源正刊&#xff0c;对国人友好&#xff01;信息如下&#xff0c;录满为止&#xff1a; 一、期刊概况&#xff1a; 智能计算类重点SCIE&EI &#x1f4cc;【期刊简介】IF&#xff1a;8.0-8.5&…

FormData 介绍和使用

FormData 是 JavaScript 中用于处理表单数据的接口。它提供了一种简单的方式来构建和发送表单数据&#xff0c;表单数据以键值对的形式向服务器发送&#xff0c;这个过程是浏览器自动完成的。但是有时候&#xff0c;我们希望通过脚本完成这个过程&#xff0c;构造或编辑表单的键…

生态工具箱 | 虚拟机测试工具WasmFuzzer,智能合约安全防火墙

长安链生态工具箱 丰富实用的区块链生态工具不仅可以让开发者部署、开发过程更加得心应手&#xff0c;还可以从能力上扩展区块链应用边界。长安链正在构建强大的生态工具箱以增强在其在各类场景下的应用能力&#xff0c;如智能合约漏洞检测、抗量子多方安全计算、链迁移、密…

CaffeineCache+Redis 接入系统做二层缓存思路实现(借鉴 mybatis 二级缓存、自动装配源码)

本文目录 前言本文术语本文项目地址设计思路开发思路DoubleCacheAble 双缓存注解&#xff08;如何设计&#xff1f;&#xff09;动态条件表达式&#xff1f;例如&#xff1a;#a.id?&#xff08;如何解析&#xff1f;&#xff09;缓存切面&#xff08;如何设计&#xff1f;&…

Linux centos7下漏洞扫描工具 Nessus8.15.9的下载、安装

一、下载Nessus 传送带地址&#xff1a;Download Nessus | Tenable 因为Darren洋的Linux操作系统是Linux Centos7 64 位&#xff0c;大家可以根据自己的选择合适的系统版本&#xff0c;在linux系统中用以下命令即可完成查询系统版本。 cat /etc/redhat-release 二、安装Ness…

Axure8 基本操作记录

参考&#xff1a;黑马产品经理课程 视频资源&#xff1a;day1&day2&#xff0c;Axure部分 文章小结图片 Axure8常用功能 选择/缩放 选择 包含选中&#xff1a;全部选中才有效&#xff08;避免误操作&#xff0c;建议使用这个&#xff09;相交选中&#xff1a;相交即全选中…

同时安装vue-cli2和vue-cli3

同时安装vue-cli2和vue-cli3 发布时间环境安装后的效果安装vue-cli2安装vue-cli3vue-cli3和vue-cli2的区别vue-cli2目录结构vue-cli3目录结构 发布时间 vue版本发布时间Seed.js2013年vue最早版本最初命名为Seedvue-js 0.62013年12月更名为vuevue-js 0.82014年1月对外发布vue-j…

vue2 用watch监听props 失效,解决办法

这个是父组件传递下来的props 这样子好像TCshow的值并没有赋上 必须修改成下面这种&#xff1a;

[golang 微服务] 7. go-micro框架介绍,go-micro脚手架,go-micro结合consul搭建微服务案例

一.go-micro框架 前言 上一节讲解了 GRPC微服务集群 Consul集群 grpc-consul-resolver相关的案例,知道了微服务之间通信采用的 通信协议&#xff0c;如何实现 服务的注册和发现&#xff0c;搭建 服务管理集群&#xff0c;以及服务与服务之间的 RPC通信方式,具体的内容包括: pro…

SpringBoot 如何使用 IOC 容器

SpringBoot 如何使用 IOC 容器 Spring 是一个非常流行的 Java 开发框架&#xff0c;它提供了一个强大的 IoC&#xff08;Inversion of Control&#xff09;容器来管理 Java 对象之间的依赖关系。在 SpringBoot 中&#xff0c;我们可以非常方便地使用这个 IoC 容器来管理我们的…

骨传导耳机音质怎么样,几款解析力度不错的骨传导耳机分享

​骨传导耳机在之前的时候一直是“冷门”的&#xff0c;但是随着技术的进步&#xff0c;现在骨传导耳机也逐渐被大家所熟知。对于喜欢运动和健身的人来说&#xff0c;骨传导耳机可以避免佩戴普通耳机导致耳朵疼痛的情况。因此&#xff0c;目前在市面上很多骨传导耳机都很受欢迎…

Git教程(快速上手,超详细)

文章目录 版本控制Git环境配置Git基本理论Git项目搭建Git文件操作使用码云IDEA集成GitGit分支 版本控制 版本迭代:每次更新就会有新的版本&#xff0c;旧的版本需要保留。所以我们需要一个版本控制工具帮助我们处理这个问题 版本控制&#xff08;Revision control&#xff09;是…

入门学习编码器与自编码器1----包括详细的理论讲解与详细的python程序代码,小白直接看懂!!!纯干货

文章目录 前言--为什么要学习编码器和自编码器&#xff1f;一、编码器与自编码器究竟是什么&#xff1f;二、下面是一个简单的Python实现自编码器的示例三、程序运行结果四、查看模型结构总结 前言–为什么要学习编码器和自编码器&#xff1f; 学习编码器和自编码器可以帮助我…

【数据分享】1929-2022年全球站点的逐月平均风速数据(Shp\Excel\12000个站点)

气象数据是在各项研究中都经常使用的数据&#xff0c;气象指标包括气温、风速、降水、能见度等指标&#xff0c;说到气象数据&#xff0c;最详细的气象数据是具体到气象监测站点的数据&#xff01; 对于具体到监测站点的气象数据&#xff0c;之前我们分享过1929-2022年全球气象…

「你将购买的是虚拟内容服务,购买后不支持退订」,真的合理么?

编辑导语&#xff1a;你是否也有见过相似提示&#xff0c;即虚拟内容服务购买之后不予退款&#xff1f;那么你有想过&#xff0c;在这一规定背后&#xff0c;其制约因素都有什么吗&#xff1f;这一规定是合理的吗&#xff1f;用户若真的有退款需求&#xff0c;产品上是否能实现…