MYSQL面试总结(一)

目录

MYSQL面试总结

一.学习教程资源

二.介绍MYSQL

三.MYSQL存储引擎介绍

四.索引


一.学习教程资源

菜鸟教程:用于初学者初步了解mysql https://www.runoob.com/mysql/mysql-tutorial.html

SQL语句编写测试:https://www.w3school.com.cn/sql/index.asp

GitHub上mysql项目:https://github.com/jaywcjlove/mysql-tutorial

中国地区省级区级数据表:https://github.com/kakuilan/china_area_mysql

二.介绍MYSQL

1)肾么事mysql

mysql是目前最流行的关系型数据库管理系统,开源,免费,是目前最好的RDBMS(关系型数据库管理系统)

  • MySQL 支持大型数据库,支持 5000 万条记录的数据仓库,32 位系统表文件最大可支持 4GB,64 位系统支持最大的表文件为8TB。

  • MySQL 是可以定制的,采用了 GPL 协议,你可以修改源码来开发自己的 MySQL 系统。

数据库(Database)是按照数据结构来组织、存储和管理数据的仓库。

每个数据库都有一个或多个不同的 API 用于创建,访问,管理,搜索和复制所保存的数据。

我们也可以将数据存储在文件中,但是在文件中读写数据速度相对较慢。

所以,现在我们使用关系型数据库管理系统(RDBMS)来存储和管理大数据量。所谓的关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。

RDBMS 即关系数据库管理系统(Relational Database Management System)的特点:

  • 1.数据以表格的形式出现

  • 2.每行为各种记录名称

  • 3.每列为记录名称所对应的数据域

  • 4.许多的行和列组成一张表单

  • 5.若干的表单组成database

2)RDBMS基本术语

  • 数据库: 数据库是一些关联表的集合。

  • 数据表: 表是数据的矩阵。在一个数据库中的表看起来像一个简单的电子表格。

  • 列: 一列(数据元素) 包含了相同类型的数据, 例如邮政编码的数据。

  • 行:一行(=元组,或记录)是一组相关的数据,例如一条用户订阅的数据。

  • 冗余:存储两倍数据,冗余降低了性能,但提高了数据的安全性。

  • 主键:主键是唯一的。一个数据表中只能包含一个主键。你可以使用主键来查询数据。

  • 外键:外键用于关联两个表。

  • 复合键:复合键(组合键)将多个列作为一个索引键,一般用于复合索引。

  • 索引:使用索引可快速访问数据库表中的特定信息。索引是对数据库表中一列或多列的值进行排序的一种结构。类似于书籍的目录。

  • 参照完整性: 参照的完整性要求关系中不允许引用不存在的实体。与实体完整性是关系模型必须满足的完整性约束条件,目的是保证数据的一致性。

    mysql的架构分析

  • 过程一:客户端连接连接器,一般我们使用客户端连接mysql的时候,就是由连接器接收和验证的,使用TCP连接,连接成功后,处于空闲状态,客户端超过8个小时没有响应,就会自动断开连接。

    我们可以自动设设置连接数据库的超时时间,但是使用mysql的时候,临时使用的内存是由连接对象管理的,长时间得不到释放,会导致OOM(Out Of Memory),会导致mysql重启,JVM中频繁Full GC;因此需要执行一个较大的查询时候,使用mysl_reset_connection初始化连接资源或者设置定期重连。

    过程二:查询缓存。在mysql8.0之前默认使用缓存,当通过一条查询语句第二次查询时候,优先从缓存中获取,采用K,v的形式存储,sql语句和查询结果,但是每当表出现更新操作的时候,会清空所有的缓存,这就是8.0之后被弃用的原因,很少 有表只用来查询而没有其他操作的。也可以自己设置是否使用缓存,把query_cache_type设置成为DEMAND,这样SQL默认不适⽤缓存,想⽤缓存就⽤SQL_CACHE。

    过程三:从缓存中未查询到数据,则会对SQL语句进行分析,判断有没有语法错误,语句中的单词属于表名还是列名

    过程四:优化器,优化主要是判断使用哪个索引,执行顺序

    过程五:执行器,包括判断查询的权限,逐行判断数据是否满足查询条件。

三.MYSQL存储引擎介绍

使用show engines;

默认存储引擎是InnoDB ,在mysql5.5之后,默认使用InnoDB,mysql5.5之前使用MyIasm,支持的所有引擎,只有InnodDB是支持事务的

查询默认存储 引擎

查询表的明细信息:

1).MyISAM和InnoDB的区别

MYISAM是5.5之前默认的存储引擎,支持全文索引,压缩,空间函数,但是不支持事务和行级锁,最大却显示崩溃后无法安全恢复。

对比:

1.是否支持行级锁:MyISAM只有表级锁,InnoDB支持表级锁和行级锁,默认是行级锁

2.是否支持事务和崩溃后的安全恢复:MyISAM强调性能,每次查询具有原子性,执行速度更快,但是不提供事务支持,InnoDB支持外键和事务等高级数据库功能,支持回滚,崩溃后的修复,和事务

3.是否支持外键:MyISAM就不支持,InnoDB支持

4.是否支持MVCC:仅InnoDB支持,MVCC用于高并发事务,比加锁更加高效,MVCC只在READ COMMITTED 和 REEPEATABLE READ两个隔离级别下工作,内部使用乐观锁和悲观锁来实现

(在InnoDB使用聚簇索引或者访问数据放入内存的应用中,执行效率比MyISAM更快)

四.索引

mysql索引使用的数据结构主要有BTree索引和哈希索引,哈希索引底层数据结构是哈希表,对于单条记录查询的时候可以选择哈希索引,查询性能最快,其余场景,更适合使用B-Tree索引

mysq中使用的是B+Tree索引,但是对于MyISAM和InnoDB实现的方式不同

事务的四大特性

原子性:事务是最小的执行单位,不允许分割,事务的原子性确保动作要么全部完成,要么完全不起作用

一致性:执行事务前后,数据保持一致,多个事务对同一数据读取的结果是相同的

隔离性:并发访问数据库的时候,一个用户的事务不被其他事务所干扰,并发事务处理之间数据库独立

持久性:一个事务被提交以后,他对数据库中数据的改变是持久的

并发事务带来的问题

脏读: 如果⼀个事务读到了另⼀个未提交事务修改过的数据。

不可重复读:如果⼀个事务只能读到另⼀个已经提交的事务修改过的数 据,并且其他事务每对该数据进⾏⼀次修改并提交后,该事务都能查询得到最新值。

幻读::如果⼀个事务先根据某些条件查询出⼀些记录,之后另⼀个事务⼜向表中 插⼊了符合这些条件的记录,原先的事务再次按照该条件查询时,能把另⼀个事务插⼊的记录也读出来。

四种隔离界别是:读未提交,读已提交,可重复读,串行化四种

这里InnoDB默认是可重复读,但是使用的Next-Key Lock锁算法,所以可以避免幻读

锁机制和InnoDB锁算法

MyISAM采用表级锁,InnoDB支持行级锁和表级锁,默认使用行级锁

为什么要使用B+树呢?

首先我们知道在数据库中索引可以使用hash算法,查询效率很高,但是不支持范围查询,因此我们考虑使用平衡二叉树,但是我们知道二叉树每个节点只有一个数据,如果数据变多的话,树就会越来越高,查询的成本也会增高,我们考虑使用B树,它可以在一个节点存储多个数据,B+树的优化是非叶子节点的数据会冗余一份在叶子节点,并且叶子节点之间使用指针相连,因此增高查询效率,而且支持范围查询,B+树里的元素也是有序的。

猜你喜欢

转载自blog.csdn.net/qq_40513633/article/details/111146180