MySQL面试题集(2)

DBMS;DBA;DB;SQL分别代表什么含义?

DBMS:(Database Management System):数据库管理系统,安装在数据库服务器上的应用软件,主要用于管理服务器上的数据和数据的增删改查 DBA:(Database Administrator):数据库管理员 , DB:(Database) 具体的数据库,负责具体存储和管理数据的实体对象 , SQL(Standand Query Language):标准查询语句,是一种语法结构,专门用于操作数据库而定义的一种语言,区分为数据定义语句(DDL)和数据操作语句(DML);其中数据定义语句用于创建、删除数据对象。数据操作语句主要用于增删改查具体数据 , MySQL

什么是数据库?

​ 数据库就是一个存放应用软件数据的仓库,按照一定的数据结构对数据进行组织和存储。 存储数据的容器 , MySQL

数据库的三大范式?

​ 1、确保每列保持原子性(即数据库表中的所有字段值是不可分解的原子值) 2、确保表中的每列都是和主键相关(表中只能保存一种数据,不可以把多种数据保存在同一张表中) , 3、确保每列都和主键直接相关,而不是间接相关(在一个数据库表中保存的数据只能与主键相关) , MySQL

数据库的分类?怎么实现存储的?

1、关系型数据库       关系型数据库是把复杂的数据结构归结为简单的二元关系(表格的形式);在关系型数据库中,对数据的操作几乎全部建立在一个或多个关系表格上,通过这些关联的表格分类、合并、连接或选取等运算来实现数据的管理 2、非关系型数据库 , , ,       非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等 , MySQL

关系型数据库的优点和缺点?

优点:     1、易于维护:存储方式为表结构,固定和结构和有限的长度 ,     2、使用方便:SQL语言通用,可用于发咋查询 ,     3、复杂操作:支持SQL,可用于一个表以及多个表之间非常复杂的查询 , 缺点: ,     1、读写性能差,尤其是海量数据的高效率读写 ,     2、固定的表结构,灵活度差 ,     3、处理高并发的读写,硬盘I/O是一个很大的瓶颈 , MySQL

非关系型数据库的优点和缺点?

优点: 1、格式灵活:存储数据的格式可以key/value形式,列形式,文档形式,图片形式等,使用灵活,应用场景广泛 ,     2、速度快:nosSQL可以使用硬盘或者随机存储器作为载体 ,     3、成本低:noSQL数据库部署简单,基本都是开源软件 ,

缺点: 1、不提供sql支持 ,     2、不支持事物 ,     3、数据结构复杂,复杂的查询较差 , MySQL

什么是数据?

" 数据(data)是事实或观察的结果,是对客观事物 的逻辑归纳,是用于表示客观事物的未经加工的原始素材。 , 数据可以是连续的值,比如声音图像 ,称为模拟数据 ;也可以是离散的,如符号、文字,称为数字数据 。 , 在计算机系统中,数据以二进制 信息单元0、1的形式表示。 ," MySQL

数据的大致可分为哪两类?

结构化数据:指具有固定格式或者有限长度的数据,如:数据库,元数据等,可以通过关系型数据库的表的形式进行存储,可以建立索引,通过B+tree等数据局结构快速搜索数据

非结构数据:全文数据,指不定长或无固定格式的数据,如邮件、world文档,等,用户自产生的数据,可以是图片,视频,音乐等 , MySQL

数据库引擎?

数据库引擎是用于存储数据、处理和保护数据 的核心服务,利用数据引擎可控制访问权限,并快速处理事务,使用数据库引擎创建用于联机事务处理或联机分析处理数据的关系型数据库,包括创建用于存储数据的表和用于查看、管理和保护数据安全的数据库对象(如索引,视图和存储过程)

MySQL数据库引擎任务?

用于实现使用数据库引擎开发数据存储系统的任务的主要顺序 1、设计:设计并创建数据库系统所需的关系文档 , 2、创建:创建系统访问,处理数据的数据表,以及实用工具的创建 , 3、部署:为单位或客户部署实现的系统 , 4、提供日常管理支持以及优化数据库的性能 , MySQL

什么是存储引擎?

用来存储结构化数据的格式,不同的存储引擎,有不同的种类和不同的方式进行数据存储

MySQL架构中各个模块是什么?都有什么作用?

1、连接管理于安全验证      每个客户都会建立一个与服务器连接的线程,服务器会有一个线程池来管理这些连接;连接数据库需要进行验证,包括用户名、密码、主机信息等 , 2、解析器 ,     解析器的作用主要是分析查询语句,最终生成解析书;首先解析器会对查询语句的语法进行分析,分析语法是否有问题,还有解析器会查询缓存,如果缓存中有对应的语句,就返回查询结果,不进行接下来的优化执行操作 , 3、优化器 ,     优化器的作用主要是对查询语句进行优化操作,包括选择合适的索引,数据的读取方式,包括获取查询的开销信息,统计信息等。 , 4、执行器 ,     执行器包括执行查询语句,返回查询结果,生成执行计划包括与存储引擎的一些处理操作 , MySQL

常见的数据库的引擎都有哪些?

" InnoDB存储引擎 , ,MyISAM存储引擎 ,MEMORY存储引擎 , , ,NDB存储引擎 , , ,Memory(Heap)存储引擎 , , ,Archive存储引擎 , , ,Federated存储引擎 , , ,Maria存储引擎 , ," MySQL

MySQL常见的数据类型?

1、数值型     tinyint : 1字节 ,     smallint : 2字节 ,     mendiumint:  3字节 ,     int: 4 字节 ,     bigint:8字节 ,     float: 浮点数;4字节 ,     double: 8字节 ,     decimal:设置自定义精度 2、日期型 ,      data: 3 字节 ,      time : 3 字节 ,      yeay: 1字节 ,     datetime: 8字节;年月日时分秒 ,      timestamp: 4 字节;年月日时分秒/2048 , 3、字符串型 ,     char 定长字符 ,     varchar: 变长字符串 ,     tinyblob不超过255个字符的二进制字符串 ,     tinytext  :短文本字符串 ,     blob: 二进制形式的长文本数据 ,     text:   长文本数据 ,     mediumblob: 二进制形式的中等长度文本数据 ,     mediumtext: 中等长度文本数据 ,     longblob: 二进制形式的极大文本数据 ,     longtext: 极大文本数据 , 4、VARVHAR和TEXT , ,     CAHR: 是定长格式。但是长度范围是0-255 , 经常变化的字段用varchar , 知道固定长度的用CHAR , 尽量使用VARCHAR , 超过255字符的只能用varchar 或者text , 能用varchar的地方不用text , MySQL

数据表约束?

表约束:就是一种对数据格式和数据内容的限制,在数据库标准查询语句SQL中,定义了通用约束规则 主键约束:primary key , 外键约束:foreign key , 唯一约束:unique , 默认约束:default , 非空约束:not null , 自增约束:auto_increment , 无符号:unsignend , MySQL

MyIsam和InngoDB的区别?

“MyIsam:是基于ISAM存储引擎,拥有较高的插入、查询速度,但是不支持事物,不支持行级锁和外键,写入数据和更新数据需要锁定整个表,开发效率低,如果表的读操作远远多于写操作且不需要数据库事务的支持,那么MyIASM也是很好的选择。 Innodb引擎提供了对数据库事务的支持,并且实现了SQL标准的四种隔离级别,主要面向OLTP(联机书屋处理过程)方面的应用,其特点是行锁设置、支持外键,并支持类似于Oracle的非锁定读,即默认情况下读不产生锁MyISAM引擎的索引结构为B+Tree,其中B+Tree的数据域存储 的内容为<span style=”“color: rgb(255, 0, 0);”">实际数据的地址,也就是说它的索引和实际的数据是分开的,只不过是用索引指向了实际的数据,这种索引就是所谓的非聚集索引,数据不存放在叶子节点里面,而是存放在另外容器中,通过引用的方式获取数据 , 与MyISAM引擎的索引结构同样也是B+Tree,但是Innodb的<span style="“color: rgb(255, 0, 0);”">索引文件本身就是数据文件, 即B+Tree的数据域存储的就是实际的数据 ,这种索引就是聚集索引。这个索引的key就是数据表的主键 ,因此InnoDB表数据文件本身就是主索引。 ," MySQL

存储引擎和索引有什么关系?

存储引擎存储是组合数据的一种格式 索引是高效快速查询某个字段或者数据 , MySQL

索引使用B+tree而不是使用btree??

btree:    1、所有叶子节点的高度是一样的,同样层高的基础上面,存储节点比较多 B+tree: ,   1、所有的数据存放在叶子节点 ,内节点存放的索引 ,   2、所以的叶子节点通过链表方式连接在一起 , ,   3、查询速度快 , MySQL

10w条数据,user表,在MySQL中是如何存储的?

主键:唯一。非空 利用B+tree的原理,将表中id,做为内节点的索引,10w条数据存放到所有的叶子节点当中 , MySQL

聚集索引和非聚集索引?

聚集索引:在B+tree存储结构中,所有的内节点存放索引,而所有的数据直接存放到叶子节点当中,这个叶子节点中会有一个key值和数据,也跟InnoDB存储引擎存储方式有关,默认InnoDB创建数据库,它的索引和数据是放在一起存放到磁盘当中,所以B+tree所有的叶子节点当中,既存放着非空、唯一的key,还存放着所有的行数据 非聚集索引:在B+tree存储结构中,它所有的内节点也是存放索引,但所有的叶子节点中存放的是外部空间引用地址,如MyIsam存储引擎,所有的数据是存放到外部的一个空间中,当使用B+tree进行查询时,首先查询到叶子节点,从叶子节点中再进行二次寻址,查询出想要的数据,这种方式就是非聚集索引 , MySQL

什么是回表?

MySQL默认在创建时会选择唯一且非空的key做为索引,一般是使用主键作为索引,但当数据库中有另外的一个字段也是唯一且非空,并将它添加索引,然后,会开辟一个新的树进行存储,这个数的所有叶子节点存储的是主键,那么当我们进行这个特殊的字段进行查找时,首先查找到叶子节点中的主键,再使用这个主键回到主键树中进行查找,这种一个树再回到主键树中进行查找的方式,称为会表 MySQL

覆盖索引?

extra using index MySQL创建数据库表时,默认会使用主键(非空且唯一)当做索引去创建B+tree树,当我们使用另外非空且唯一创建索引,去开辟新的B+tree树,再使用查询ID的方式进行查找时,会首先查找的新的B+tree树,因为新创的索引所有的叶子节点中存放的就是ID,会直接查询出ID,不进行回表查询,这种就是索引覆盖 , MySQL

联合索引(组合索引)?

如果索引列包含的是多个列,那么就称之为联合索引,组合索引 如name ,age 这两个字段经常性的查询,那么可以将这两个列添加索引,这个索引就是联合索引(组合索引) , MySQL

最左查询?

在包含多个列的查询过程中,会首先依靠先查第一列,再查第二列 如一个联合索引中有name, age ,那么在查询过程中会首先查询name,在去匹配age,如果name不存在,就不会再去匹配age,这种方式就是最左匹配 , MySQL

前缀索引

有时候需要索引很长的字符串,这会让索引变的大且慢,通常情况下可以使用,某个列开始的部分字符串,进行节约索引空间,从而提高索引效率,但是这会降低索引的选择性,索引的选择性是指不重复的索引值和数据表记录总数的比值,范围从1-# 之间,索引的选择性越高则查询效率越高,因为选择性更高的索引可以让mysql在查找的时候过滤更多的行   一般情况下,某个列前缀的选择性也是足够高的,足以满足查询的性能,但是对应BLOB,TEXT,VACHARAR类型的列,必须要使用前缀索引,因为mysql不允许这些列的完整长度,使用该方法的诀窍在于要使用足够长的前缀以保证较高的选择性,通常又不能太长

索引下推

索引下推(index  condition  pushdown)简称ICP 在不使用ICP的情况下,在使用非主键索引(普通索引或者二级索引)进行查询时,存储引擎通过索引检索到数据,然后将数据返回给mysql服务器,服务器进行判断是否符合条件 ,在使用ICP的情况下,如果存在某些索引的列的判断时,mysql服务器会将这部分的判断传递给存储引擎,然后由存储引擎进行判断是否符合条件,只有符合条件时,才会将数据检索出来然后返回给MySQL服务器

索引的优点?

1、大大减少了服务器对数据表扫描的数据量 2、帮助服务器避免排序和临时表 , 3、将随机io编程顺序IO , MySQL

索引的用处?

1、快速查找匹配where子句的行 2、从consideration中消除行,如果可以在多个索引之间进行选择,mysql通常会使用找到最少行的索引 , 3、如果表具有多列索引,则优化器可以使用索引的任何最左前缀来查找行 , 4、当有表连接的时候,从其他表检索行的数据 , 5、查找特定索引列的min或者max值 , 6、如果排序或分组时可用索引的最左前缀上完成的,则对表进行排序和分组 , 7、在某些情况下,可以优化查询以检索值而无需查询数据行 , MySQL

索引的分类?

主键索引 唯一索引 , 普通索引 , 全文索引 , 组合索引 , MySQL

索引采用的数据结构?

哈希表 B+tree , MySQL

脏读?

事务A和事务B同时操作一个表,如果事务A修改了数据,事物B进行读取,读取到了事务A并没有提交的数据,这就是脏读 MySQL

不可重复读?

事务A和事务B同时操作一个表,事务A对数据进行修改,然后进行提交,事务B第二次查看数据,和第一次查看的数据并不一样,就称为不可重复读 MySQL

幻读?

事物A和事务B同时操作一个数据表,事物A对数据进行了增加操作,B事物在这个时候也进行增加操作,事物B就会出现堵塞的情况,数据并不能增加进去,当事务A提交事务,事务B报错,显示增加的字段已经有值,这种情况就是幻读 MySQL

读未提交?
read uncommitted
遵循一级封锁协议,只对修改数据的并发做限制,不能修改其他事物正在修改的数据,是mysql中最低的隔离级别,也是对数据安全性防护最低的,如果两个事务同时操作一个数据表,就可能出现:脏读,不重复读,幻读等情况 MySQL #### 读已提交 read committed

遵循二级封锁协议,只允许读取已经提交的数据,查询的数据是修改之前的备份,是有MVCC(多版本并发控制)影响,查询的数据只能是已经提交的数据,容易造成不可重复读,幻读的情况 , MySQL

可重复读

repeat read 比 read committed更加严格一点,但仍然是二级封锁级别,只是读取收到MVCC的影响,默认表中会有两个隐藏字段,创建版本,修改删除版本,读取数据时只会读取创建版本小于或等于当前的版本,并且修改删除字段大于或为空的所有的数据,这就限制了就算事务A提交了数据,事务B不提交数据,也是查询不到的,但会出现,事务A增加数据,事务B在增加数据会堵塞,并最后失败,对于这样的查询不到数据,但添加不了数据的情况称为幻读 MySQL

事物隔离级别以下各级别的并发访问问题?

读未提交:(read uncommite) 会引起:脏读,幻读,不可重复读 读已提交:(read commite) , 幻读,不可重复读 , 可重复读:(repeat read) , 幻读 , 可串行化:(Serializable) , , MySQL

什么是数据持久化?

持久化(persistence):就是把内存中的数据永久性保存到数据库当中(本地磁盘当中) MySQL

起别名

select username ‘用户名’,  password ‘密码’ from user

拼接显示

tom + 100 , null+null , null+100 , , sql中使用+号拼接 100+2.5 , tom + 100 = 100 , null+null = null , null+100 = null , 注意:+ 适合于同种类型的相加,& 用于不同类型的拼接 , sql

字段拼接显示 select concat(username, passowrd) from quser; sql
去重显示 select distinct deparent_id from quser; sql

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值