目录
前言
数据库基础
1.什么是关系型数据库和非关系型数据库?
2.什么是 SQL?
3.MySQL 有什么优点?
4.MySQL 的基础架构?
存储引擎
1.MySQL 支持哪些存储引擎?默认使用哪个?
2.MySQL 存储引擎架构了解吗?
3.MyISAM 和 InnoDB 有什么区别?(重点)
数据库篇内容是属于比较注重实战的技术,死记硬背是很难理解,推荐下丁奇大佬的《mysql45讲》,由浅入深,讲的非常好,虽然大佬犯事了,但是45讲真的经典。看看对数据库会有进一步的认识。
MySQL内容挺多,后续从索引,事务,锁,日志,性能优化方面具体归纳总结。
关系型数据库(Relational Database)是一种基于关系模型(即表格模型)的数据库,其中数据以表格形式组织,每个表格包含了多行数据,每行数据又包含了多个属性(即列)。这些表格之间可以通过共同的字段建立关联,从而形成一个复杂的数据结构。关系型数据库通常使用SQL(Structured Query Language)来进行数据操作和查询。这些数据库通常支持ACID(Atomicity、Consistency、Isolation、Durability)事务,具有强一致性和数据完整性。
相对而言,非关系型数据库(NoSQL,Not Only SQL)则不遵循关系模型的原则,通常采用键-值存储、文档存储、列族存储等方式来存储和组织数据。非关系型数据库通常不使用SQL进行数据操作和查询,而是使用特定的查询语言或API。这些数据库通常具有高可伸缩性和高性能,但可能会牺牲一致性和数据完整性。
SQL(Structured Query Language,结构化查询语言)是一种用于管理关系型数据库的标准语言。
SQL语言包含一组命令和语句,可以用于创建、查询、更新和删除数据库中的数据。常见的SQL命令包括SELECT、INSERT、UPDATE和DELETE等,这些命令可以用于从数据库中检索数据、添加新数据、更新和删除现有数据等操作。
SQL语言具有以下特点:
MySQL基础架构可以分为两个主要部分:Server层和存储引擎层。
1.Server层:
Server层是MySQL基础架构的上层部分,主要负责处理客户端连接、SQL解析、查询优化、缓存、事务管理、权限控制等功能。Server层包括以下组件:
2.存储引擎层:
存储引擎层是MySQL基础架构的下层部分,主要负责数据的存储和检索。MySQL支持多种不同的存储引擎,每种存储引擎都有不同的特点和适用场景。
MySQL 支持多种存储引擎,你可以通过 show engines 命令来查看 MySQL 支持的所有存储引擎。
默认情况下,MySQL 5.5版本及以后的版本使用InnoDB作为默认存储引擎。
MySQL存储引擎的插件式架构是其设计中的重要特点之一。该架构的基本思想是将数据存储和管理的功能从数据库服务器的核心代码中分离出来,作为独立的组件实现,并以插件的形式加载到MySQL服务器中。这样一来,用户可以根据自己的需求和场景选择不同的存储引擎,从而获得更好的性能和可靠性。并且,你还可以根据 MySQL 定义的存储引擎实现标准接口来编写一个属于自己的存储引擎。
另外,MySQL的存储引擎是基于表的,而不是基于数据库的。这意味着用户可以为不同的表选择不同的存储引擎,以满足不同表的不同需求。例如,对于高并发的 OLTP(联机事务处理)应用,可以选择使用InnoDB存储引擎来保证数据的一致性和事务的可靠性;而对于只读的数据仓库,可以选择使用MyISAM存储引擎来提高查询性能。
MyISAM和InnoDB是MySQL中最常用的两种存储引擎,它们的差异主要体现在以下几个方面:
1.事务支持:MyISAM不支持事务,而InnoDB支持ACID事务,可以保证数据的一致性和可靠性。
2.锁机制:MyISAM使用表级锁,即在进行写操作时会锁定整个表,而InnoDB支持行级锁定和表级锁定,可以更好地支持并发操作。
3.索引结构:MyISAM使用B树索引,而InnoDB使用B+树索引,B+树索引支持范围查询和排序等操作效率更高。
4.缓存:MyISAM的缓存机制只有一级缓存,而InnoDB有多级缓存,包括查询缓存、InnoDB缓存池和操作系统缓存,能够更好地提高查询性能。
5.外键支持:MyISAM不支持外键,而InnoDB支持外键,可以保证数据的完整性和一致性。
6.数据和索引存储方式:MyISAM将数据和索引分别存储在不同的文件中,而InnoDB则将数据和索引保存在同一个文件中。
7.是否支持异常崩溃后恢复
MyISAM 不支持,而 InnoDB 支持。
使用 InnoDB 的数据库在异常崩溃后,数据库重新启动的时候会保证数据库恢复到崩溃前的状态。这个恢复的过程依赖于 redo log 。
8.性能差别:
InnoDB 的性能比 MyISAM 更强大,不管是在读写混合模式下还是只读模式下,随着 CPU 核数的增加,InnoDB 的读写能力呈线性增长。MyISAM 因为读写不能并发,它的处理能力跟核数没关系。
附一张图: