MySQL学习笔记(1)

来源:互联网 发布:编程用什么语言好 编辑:程序博客网 时间:2024/05/17 18:17

第一章 MySQL架构

客户连接及认证,在服务器拥有自己的线程,每个连接所属的查询都会在指定的某个单独线程中完成、
认证方式:基于用户名、原始主机信息和口令。

对查询请求,首先查询缓存,若不存在则对查询进行解析,创建解析树,对其进行优化(优化器)
----------优化器不关心存储引擎的差异,但存储引擎可能对查询优化过程产生影响。


并发机制
1.共享锁/排他锁
2.锁粒度
MySQL锁策略由存储引擎来支持。
表锁:除了存储引擎支持外,MySQL本身能使用各种有效的表锁,例如alter table语句中,使用表锁而无需考虑存储引擎。
行锁:仅由存储引擎来支持,如Innodb

事务:
支持ACID特性
不同级别的隔离性:
READ UNCOMMITTED、READ COMMITTED、REPEATABLE READ、SERIALIZABLE
mysql > SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED

死锁处理:InnoDB通过回滚拥有最少排他行级锁的事务来处理死锁。

事务日志:预写式日志
1.存储引擎更新数据在内存中的拷贝
2.将数据改变写入事务日志
3.在某个时间统一将表数据更新到磁盘中。


MySQL的事务特性
MySQL AB提供了三个事务型存储引擎:InnoDB、NDB Cluster、Falcon
1.autocommit(自动提交):除非显式的开始一个事务,否则将把每个查询视为单独一个事务自动执行。
mysql > show variables like 'AUTOCOMMIT';

2.在事务中混合使用存储引擎,MySQL服务器层并不管理事务,而是由存储引擎来实现事务的处理。这意味着在混合事务性和非事务性表的

事务中,若需要回滚时,非事务性表上做的修改将无法取消。

3.支持隐式和显式锁定。


多版本控制
InnoDB:在每个数据行中记录版本号,并为每个数据行增加两个隐含值:行的创建时间和删除时间
每开始一个事务,版本号都会递增。
在隔离级别为REPEATBLE READ时,MVCC应用方式为:
select:
——版本早于当前事务版本的数据行
——删除版本的行版本必须大于当前事务版本
Insert:
为每个新增行记录当前版本号
delete:
为每个删除行记录当前办不号,作为行删除标识。
update:
为每个需要更新的行,建立一个新的行拷贝,并为其记录当前版本号,同时也为旧行记录版本号作为旧行的删除版本标识。

 

原创粉丝点击