MySQL常见面试题(二)

news2024/11/25 14:54:59

😀前言
在数据库管理和操作中,我们常常需要深入理解其各种数据类型、特性和索引类型来优化我们的数据库设计和查询效率。其中,字符串类型和它们如何在MySQL中实现和使用成为了一个必不可少的知识点。同时,我们也需要理解新的特性,如虚拟生成列,它为我们提供了更多的灵活性和优化方案。
.
除此之外,为了保证数据库操作的准确和高效,我们还需要理解事务的基本特性和它可能带来的问题,以及如何通过不同级别的事务隔离来解决这些问题。
.
最后,我们会探讨MySQL中不同的索引类型,这些索引类型为我们提供了多种方式来优化我们的数据库查询。

🏠个人主页:尘觉主页
在这里插入图片描述

🧑个人简介:大家好,我是尘觉,希望我的文章可以帮助到大家,您的满意是我的动力😉😉

在csdn获奖荣誉: 🏆csdn城市之星2名
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 💓Java全栈群星计划top前5
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🤗 端午大礼包获得者
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 🥰阿里云专家博主
⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ ⁣⁣⁣⁣ 😉亚马逊DyamoDB结营

💕欢迎大家:这里是CSDN,我总结知识的地方,欢迎来到我的博客,感谢大家的观看🥰
如果文章有什么需要改进的地方还请大佬不吝赐教 先在次感谢啦😊

文章目录

    • 谈谈MySQL里的字符串类型
    • VARCHAR(M)最多能存储多少数据?
    • 什么是虚拟生成列?
    • 请说下事务的基本特性
    • 事务并发可能引发什么问题?
    • 请描述下MySQL中InnoDB支持的四种事务隔离和区别
    • MySQL有哪些索引类型
    • 😄总结

谈谈MySQL里的字符串类型

MySQL里的字符串类型有:SET、BLOB、ENUM、VARCHAR、CHAR、TEXT。VARCHAR和 CHAR是两种最主要的字符串类型。VARCHAR类型用于存储可变长字符串,大部分的业务情况下比定长类型更节省空间,CHAR类型是定长的,CHAR适合存储很短的字符串,或者所有值定长或都接近同一个长度。

使用BLOB和TEXT则要慎重,一般把 BLOB或TEXT 列分离到单独的表中,还可以对BLOB或TEXT 列使用合成的(Synthetic)索引,就是根据大文本字段的内容建立一个散列值并单独存储在数据列中,可以通过检索散列值找到数据行。如果表中的字段的取值是固定几个字符串,可以使用枚举列代替常用的字符串类型。

VARCHAR(M)最多能存储多少数据?

对于VARCHAR(M)类型的列最多可以定义65535个字节。其中的M代表该类型最多存储的字符数量,但在实际存储时并不能放这么多。

MySQL对一条记录占用的最大存储空间是有限制的,除了BLOB或者TEXT类型的列之外,其他所有的列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过65535个字节。所以MySQL服务器建议我们把存储类型改为TEXT或者BLOB的类型。这个65535个字节除了列本身的数据之外,还包括一些其他的数据,从行记录格式我们可以得知,为了存储一个VARCHAR(M)类型的列,其实需要占用3部分存储空间:真实数据、真实数据占用字节的长度、NULL值标识,如果该列有NOT
NULL属性则可以没有这部分存储空间。

我们假设表中只有一个VARCHAR字段的情况:

如果该VARCHAR类型的列没有NOT NULL属性,那最多只能存储65532个字节的数据,因为真实数据的长度可能占用2个字节,NULL值标识需要占用1个字节。

如果VARCHAR类型的列NOT NULL属性,那最多只能存储65533个字节的数据,因为真实数据的长度可能占用2个字节,不需要NULL值标识。

如果VARCHAR(M)类型的列使用的不是ascii字符集,那M的最大取值取决于该字符集表示一个字符最多需要的字节数。在列的值允许为NULL的情况下,gbk字符集表示一个字符最多需要2个字节,那在该字符集下,M的最大取值就是32766(也就是:65532/2),也就是说最多能存储32766个字符;utf8字符集表示一个字符最多需要3个字节,那在该字符集下,M的最大取值就是21844,就是说最多能存储21844(也就是:65532/3)个字符。

不管如何,请牢记:MySQL一个行中的所有列(不包括隐藏列和记录头信息)占用的字节长度加起来不能超过65535个字节

什么是虚拟生成列?

虚拟生成列又叫GeneratedColumn,是MySQL 5.7引入的新特性,就是数据库中这一列由其他列计算而得。在MySQL 5.7中,支持两种Generated
Column,即Virtual
Generated Column(虚拟生成的列)和Stored
Generated Column(存储生成的列),二者含义如下:

1、Virtual
Generated Column(虚拟生成的列):不存储该列值,即MySQL只是将这一列的元信息保存在数据字典中,并不会将这一列数据持久化到磁盘上,而是当读取该行时,触发触发器对该列进行计算显示。

2、Stored
Generated Column(存储生成的列): 存储该列值,即该列值在插入或更新行时进行计算和存储。所以相对于Virtual Column列需要更多的磁盘空间,与Virtual
Column相比并没有优势。因此,MySQL
5.7中,不指定Generated
Column的类型,默认是Virtual
Column

在表中允许Virtual
Column和Stored
Column的混合使用

提高效率:由于mysql在普通索引上加函数会造成索引失效,造成查询性能下降,Generated Column(函数索引)刚好可以解决这个问题,可以在Generated Column加上索引来提高效率。但是不能建立虚拟列和真实列的联合索引,同时虚拟列是不允许创建主键索引和全文索引。

创建虚拟生成列的语法:

CREATE TABLE triangle (

a double DEFAULT NULL,

b double DEFAULT NULL,

sidec double GENERATED
ALWAYS AS (SQRT(a * a + b * b))

) ;

alter table triangle add column sided tinyint(1) generated always as
(a*b) virtual;

请说下事务的基本特性

事务应该具有4个属性:原子性、一致性、隔离性、持久性。这四个属性通常称为ACID特性。

原子性指的是一个事务中的操作要么全部成功,要么全部失败。

一致性指的是数据库总是从一个一致性的状态转换到另外一个一致性的状态。比如A转账给B100块钱,假设中间sql执行过程中系统崩溃A也不会损失100块,因为事务没有提交,修改也就不会保存到数据库。

隔离性指的是一个事务的修改在最终提交前,对其他事务是不可见的。

持久性指的是一旦事务提交,所做的修改就会永久保存到数据库中。

事务并发可能引发什么问题?

当一个事务读取到了另外一个事务修改但未提交的数据,被称为脏读。

当事务内相同的记录被检索两次,且两次得到的结果不同时,此现象称为不可重复读。

在事务执行过程中,事务2将新记录添加到正在读取的事务1中,导致事务1按照某个相同条件多次读取记录时,后读取时读到了之前没有读到的记录,发生幻读。

事务2中是删除了符合的记录而不是插入新记录,那事务1中之后再根据条件读取的记录变少了,在MySQL中这种现象不属于幻读,相当于对每一条记录都发生了不可重复读的现象。

请描述下MySQL中InnoDB支持的四种事务隔离和区别

read uncommitted:未提交读,可能发生脏读、不可重复读和幻读问题。

read committed:提交读,可能发生不可重复读和幻读问题,但是不会发生脏读问题。

repeatable read:可重复读,在SQL标准中可能发生幻读问题,但是不会发生脏读和不可重复读的问题,但是MySQL通过MVCC基本解决了幻读问题。这也是MySQL的缺省隔离级别。

serializable:串行化读,脏读、不可重复读和幻读问题都不会发生。

MySQL有哪些索引类型

从数据结构角度可分为B+树索引、哈希索引、以及FULLTEXT索引(现在MyISAM和InnoDB引擎都支持了)和R-Tree索引(用于对GIS数据类型创建SPATIAL索引);

从物理存储角度可分为聚集索引(clustered index)、非聚集索引(non-clustered index);

从逻辑角度可分为主键索引、普通索引,或者单列索引、多列索引、唯一索引、非唯一索引等等。

😄总结

通过深入探讨MySQL中的字符串类型和虚拟生成列,我们不仅加深了对这些基本概念的理解,还学到了如何更好地使用它们来优化我们的数据库设计。

我们也学习了事务的ACID特性和它在保持数据库一致性和安全性方面的重要性。通过理解不同级别的事务隔离,我们可以更好地解决事务并发可能带来的问题,如脏读、不可重复读和幻读。

最后,我们对MySQL中的不同索引类型进行了探讨,了解了如何利用这些索引来优化我们的数据库查询,提高查询效率和准确性。

总的来说,这些深入的洞察为我们提供了一套全面的工具和策略来更好地设计和管理我们的MySQL数据库,确保它们不仅高效,而且可靠和安全。

😁热门专栏推荐
想学习vue的可以看看这个

java基础合集

数据库合集

redis合集

nginx合集

linux合集

手写机制

微服务组件

spring_尘觉

springMVC

mybits

等等等还有许多优秀的合集在主页等着大家的光顾感谢大家的支持

🤔欢迎大家加入我的社区 尘觉社区

文章到这里就结束了,如果有什么疑问的地方请指出,诸佬们一起来评论区一起讨论😁
希望能和诸佬们一起努力,今后我们一起观看感谢您的阅读🍻
如果帮助到您不妨3连支持一下,创造不易您们的支持是我的动力🤞

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1022497.html

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

相关文章

基于Java的高校实习管理系统设计与实现(亮点:实习记录、实习打分、实习作业,功能新颖、老师没见过、当场唬住!)

高校实习管理系统 一、前言二、我的优势2.1 自己的网站2.2 自己的小程序(小蔡coding)2.3 有保障的售后2.4 福利 三、开发环境与技术3.1 MySQL数据库3.2 Vue前端技术3.3 Spring Boot框架3.4 微信小程序 四、功能设计4.1 主要功能描述 五、系统主要功能5.1…

若依cloud -【 100 ~ 】

100 分布式日志介绍 | RuoYi 分布式日志就相当于把日志存储在不同的设备上面。比如若依项目中有ruoyi-modules-file、ruoyi-modules-gen、ruoyi-modules-job、ruoyi-modules-system四个应用,每个应用都部署在单独的一台机器里边,应用对应的日志的也单独存…

Vue 3 + TypeScript + jsplumb

网上搜了很久,没有找到基于vue3写的jsplumb,如是写了一个简单版,已开源 Vue 3 TypeScript jsplumb 支持回显,拖拽,连线的基础功能

十分钟理解OSPF路由协议

十分钟理解OSPF路由协议 1.RIP的缺陷以跳数为度量值最大跳数为15更新路由表采用全更新收敛速度慢 2.RIP与OSPF比较OSPF概述运行OSPF协议之前运行OSPF协议之后 3.OSPF协议工作过程1.发现邻居2.建立邻接关系3.传递链路状态信息4.计算路由 4.OSPF分区域管理 有RIP协议,…

Spring学习(三):MVC

一、什么是MVC MVC(Model-View-Controller)是一种软件设计模式,用于组织和管理应用程序的代码结构。它将应用程序分为三个主要部分,即模型(Model)、视图(View)和控制器(…

WPS 换行后缩进、加粗等自定义样式的清除

在使用WPS的Word编辑文字时,经常会出现换行后,自动缩进这种格式,需要清除这种样式,可以按照下图来操作:

无锡矽杰微电子----XC8P9520MCU之项目开发

上篇文章说了开发环境和烧录环境的配置以及安装,那么接下来就需要开发项目了。 Demo文件资料-无锡矽杰微电子有限公司 (xjmcu.com) 这里贴上矽杰微官网的资料下载专区,包括不同芯片的DEMO和上文所说的工具。 既然是项目开发,那么芯片的数据手…

SaaS架构C/S检验科LIS系统源码: 检验申请、标本编号、联机采集

适用于医院检验科实际需要的LIS管理系统, 实现检验业务全流程的计算机管理。从检验申请、标本编号、联机采集、中文报告单的生成与打印、质控图的绘制和数据的检索与备份。通过将所有仪器自身提供的端口与科室LIS系统中的工作站点连接,实现与医院HIS系统的对接。 通过门诊医生和…

无涯教程-JavaScript - MDETERM函数

描述 MDETERM函数返回数组的矩阵行列式。 语法 MDETERM (array)争论 Argument描述Required/OptionalArrayA numeric array with an equal number of rows and columns.Required Notes 数组可以作为单元格范围给出,如A1:C3;作为数组常量,如{1,2,3; 4,5,6; 7,8,9}&#xff1…

工业物联网大数据解决方案:排水设备远程监控和大数据统计系统

一、项目背景 给排水系统,作为城市的基础设施建设,是居民生产生活的必要保障。由于给排水系统通常站点零散分布,运维管理涉及的区域广泛,水位、流量、机泵运行等运行参数的测报,目前采取人工测量的,上令下…

如何评价低代码平台在企业复杂应用场景中的适用性?

随着编程语言的不断迭代、抽象、简化和整合,低代码技术正不断精进,形成更为简单清晰的图形化界面与高级语言结合的开发模式。在数字化转型方案的实施过程中,低代码开发广泛适用于各种应用场景,能够减少繁琐的重复性代码编写工作&a…

Docker安装与卸载

Docker安装与卸载 安装 yum install -y yum-utils \device-mapper-persistent-data \lvm2 --skip-broken更新本地镜像源 打开终端或 SSH 连接到 Rocky Linux 的服务器。 进入 /etc/yum.repos.d/ 目录,该目录包含 Rocky Linux 的 yum 配置文件。 cd /etc/yum.repo…

二维码智慧门牌管理系统:提升城市管理效率与便捷性

文章目录 前言一、二维码智慧门牌管理系统的基本原理二、二维码智慧门牌管理系统的开发解决方案三、二维码智慧门牌管理系统的优势 前言 随着科技的不断发展,城市管理模式也在不断升级与优化。其中,二维码智慧门牌管理系统的出现,为城市管理…

电脑提示找不到msvcr120.dll无法继续执行代码,哪个修复方法更简单

电脑报错“找不到msvcr120.dll无法继续执行代码”。我相信,对于许多使用电脑的朋友来说,这个问题并不陌生。我们在使用电脑的过程中,可能会遇到各种各样的问题,其中就包括了找不到msvcr120.dll这个文件的问题。那么,这…

SF506DS-ASEMI超快恢复二极管SF506DS

编辑:ll SF506DS-ASEMI超快恢复二极管SF506DS 型号:SF506DS 品牌:ASEMI 封装:TO-252 特性:贴片、快恢复二极管 正向电流:5A 反向耐压:600V 恢复时间:35ns 引脚数量&#xf…

ICS TRIPLEX T8403调节器模块产品特点

ICS TRIPLEX T8403 是一款调节器模块,通常用于工业自动化和控制系统中,主要用于监测和控制过程变量以确保系统的稳定性和性能。以下是该产品的一些主要特点: 高精度调节: T8403 调节器模块通常具有高精度的控制功能,可…

网络安全(黑客技术)学习笔记

1.网络安全是什么 网络安全可以基于攻击和防御视角来分类,我们经常听到的 “红队”、“渗透测试” 等就是研究攻击技术,而“蓝队”、“安全运营”、“安全运维”则研究防御技术。 2.网络安全市场 一、是市场需求量高; 二、则是发展相对成熟…

CDH大数据平台集群部署

文章目录 1. 资源准备2. 部署 Mariadb 数据库3. 安装CM服务4. 安装数据节点5. 登录CM系统 1. 资源准备 准备好CDH安装包资源,官方网站下载需要账号,如果没有账号可以去网上到处搜搜。主要涉及到的资源有: cloudera-manager-servercloudera-m…

IEEE模板中没有.bib相关内容怎么添加?

为了加深个人对该问题的记忆,特在此进行记录。 下图是IEEE某期刊提供的期刊模板,该模板来自于IEEE-Template Selector 从图中并没有看到bib文件,而在main.tex中也并没有相关引导,只是提到: 那如何添加呢?…

深度学习——所需知识二

深度学习——所需知识二 文章目录 前言一、微积分1.1. 导数和微分1.2. 偏导数1.3. 梯度1.4. 链式法则 二、自动微分2.1. 简单例子2.2. 非标量变量的反向传播2.3. 分离计算2.4. python控制流的梯度计算 三、概率3.1. 基本概率论3.1.1. 概率论公理3.1.2. 随机变量 3.2. 处理多个随…