一、什么是MySQL?
MySQL是现在市面上用的最广的关系型数据库。简单理解也就是存放数据的仓库。关于关系型数据库和非关系型数据库可以点击这里查看之前博客。
1、逻辑架构图
最上层服务不是MySQL所独有的,大多数基于网络的客户端/服务器都通过这种方式实现。其中每个客户端连接都会在服务器进程中拥有一个线程,该客户端的查询操作在这个线程中执行,其中服务器会缓存线程,因此不需要对每一条客户端连接都创建或销毁线程。新版的MySQL提供了一个API,支持线程池插件,可以使用少量线程服务大量的客户端连接。
第二层架构是MySQL最重要的一部分,MySQL的大多数功能如:解析、分析、优化、缓存、函数等等都在这一层实现。
第三层包括存储引擎,存储引擎负责数据的存储和读取。其中它通过API和服务器通信,不同存储引擎之间不会相同通信,并且绝大多数存储引擎不会解析SQL,InnoDB存储引擎因为需要解析外键,因此它可以解析SQL。
2、并发控制
任何时刻,只要有多个查询在同一时刻修改数据,都会产生并发控制问题。MySQL分别在服务器层和存储引擎层保证并发。
2.1、锁
为了防止两个线程同时操作同一块资源,可以在一个线程执行过程中将这块资源“锁”住,被锁住的资源只有自己可以操作,这样可就可以保证并发的安全,这也就是锁的意义。
2.1.1、读写锁
从数据库中读取数据是不会产生并发问题的,即使同一时刻有多条线程读取也不会什么问题,因为读取不会修改数据,但是如果一个线程在读取,另一个线程在修改,这样就会产生无法控制的结果,可能读取到修改前的数据,也可能读取到修改后的数据。
解决这种问题其实也非常简单,我们可以定义两种类型的锁:共享锁和排他锁,也可以称为读锁和写锁。
- 读锁是共享的,或者说相互不阻塞的,也就是说即使同时有多个线程读取同一块资源,也互不干扰
- 写锁是排他的,或者说相