1.1 mysql逻辑结构mysql
第一层: 负责链接处理,受权认证,安全等事情sql
第二层:负责mysql的大部分核心功能 ,查询解析,分析,优化,缓存和全部的内置函数,全部跨存储引擎的功能都在这一层实现,,存储过程,视图,触发器等数据库
第三层:存储引擎,负责mysql中数据的提取和存储;缓存
1.2 并发控制——安全
共享锁:也叫读锁,读锁是共享的,多个链接能够同时获取数据并互不干扰!并发
排他锁:也叫写锁,排他性,阻塞其余的写锁和读锁;在同一时间内,只能有一个用户执行写入操做,而且防止其余用户进行读取正在写入的同一资源,函数
锁粒度 性能
表锁:表锁是mysql中最基本的锁策略,而且是开销最小的策略,它锁定整张表,当有用户对它进行(insert,delete,update)操做时,首先获取写锁,阻塞其余的用户进行读写操做!优化
read local 表锁在特定的状况下能够支持某些类型的并发写操做,,此外写锁拥有更高的优先级,所以一个写锁的请求可能会被插入到读锁队列的前面队列
行级锁:行级锁能够最大程度的支持并发处理,同时也会对性能开销更大!
1.3 事物管理
原子性:一个事务必须被认为是一个不能够分割的最小工做单元,事务内的操做要么所有提交成功,要么失败回滚,对于事务来讲不能只执行其中的一部分!这就是事务的原子性
一致性:数据库老是从一个一致性状态转移到另外一个一致性状态
隔离性:一个事务中所作的操做在未最终提交前,对其余事务是不可见的
持久性:一旦事务提交,则其所作的修改就会永久的保存到数据库中!
并发状况下带来的问题
一、脏读:事务A读取了事务B更新的数据,而后B回滚操做,那么A读取到的数据是脏数据
二、不可重复读:事务 A 屡次读取同一数据,事务 B 在事务A屡次读取的过程当中,对数据做了更新并提交,致使事务A屡次读取同一数据时,结果 不一致。
三、幻读:系统管理员A将数据库中全部学生的成绩从具体分数改成ABCDE等级,可是系统管理员B就在这个时候插入了一条具体分数的记录,当系统管理员A改结束后发现还有一条记录没有改过来,就好像产生了幻觉同样,这就叫幻读。
mysql在的innoDB和XtraDB经过多版本并发控制(MVCC,Multiversion Concurrency Control)解决了幻读的问题
小结:不可重复读的和幻读很容易混淆,不可重复读侧重于修改,幻读侧重于新增或删除。解决不可重复读的问题只需锁住知足条件的行,解决幻读须要锁表
事务隔离级别