MySQL最重要的特性是:存储引擎架构,该架构将查询处理和其他系统任务和数据的存储、提取 相分离 。所以根据业务特点选择合适的数据存储方式(即选择存储引擎的类型)
1 MySQL架构分为三层
1.1 连接层
- 该层用于处理客户端的连接请求和客户端的权限认证。
- 每个客户端都会在MySQL中拥有一个线程,客户端的数据操作将在此线程中执行处理。
- MySQL负责缓存线程,不需要客户都安操心
1.2 优化处理层
- 该层对SQL语句进行解析、优化、执行
- 对于selec语句,默认会在解析前先查询MySQL的缓存,若有则直接返回,否则执行解析查询
1.3 存储引擎
- 该层会发生 加锁解锁 和事务的处理,另外负责对数据的提取和存储,言外之意就是锁和事务都是与存储引擎相关的
2 锁的简单介绍
并发情况下如不加以控制,则会对数据产生不一致的结果和意料之外的事情,通常使用锁来控制
2.1 锁类型
- 读写锁 共享锁和排他锁 // 读锁就是共享锁 写锁就是排他锁,叫法不一样而已
- 写锁(排他锁)会阻塞其他锁,包括读锁和写锁,所以在写锁执行时,其他读写锁都需要等待
2.1 锁级别 | 锁粒度
存储引擎可以实现自己的锁策略和锁粒度
表锁
- MySQL最基本的锁策略也是开销最小的锁策略,但并发能力降低
- 顾名思义,加锁是针对表,一旦加锁(写锁),凡是涉及该表的操作都要阻塞等待
行锁
- 最大程度的解决并发处理,但也带来了更大的性能开销
- 针对行级别的加锁解锁操作
3 事务日志
事务日志可以提高事务的效率
简单的说就是 MySQL从磁盘拷贝了一份镜像到内存中,当客户端进行数据操作时,操作的是内存中的数据,同时MySQL将该此操作写到磁盘中的日志中。如此多次操作,日志追加了更多内容,待到合适的时候,MySQL会将日志中的操作内容重新持久化到磁盘中,这样就实现了数据的持久化。即便MySQL挂掉,日志没有删除,下次重启的时候,读取日志并把之前的数据操作恢复到磁盘中,实现了数据的一致性。
- show ENGINES; //获取MySQL支持的存储引擎列表
show variables like ‘default_storage_engine’; //查看默认存储引擎
show variables like ‘autocommit’; //查看事务提交方式
set autocommit = 0或1 0:手动提交事务 1:自动提交事务
set transaction isolation level read commited; //设置事务的隔离级别 四种自选
- -