第一章 MYSQL架构

1.1 MYSQL逻辑架构

第一层:并非MYSQL独有,许多都是基于网络的客户端/服务器模型,建立链接;

第二层:MYSQL的大部分核心内容,比如查询、分析、优化、缓存及所有的内建函数; 

第三层:数据库存的存储引擎。

1.1.1 连接管理和安全性

1.1.2 优化和执行

1.2 并发控制

1.2.1读锁和写锁

1.2.2锁粒度

表锁和行级锁

1.3 事务

什么是事务:是指一系列操作要么全部执行,要么全部不执行,即满足原子性操作。

其中ACID是事务中的重要概念。

在介绍ACID之前,先举个简单的例子:银行应用中,假设一个银行数据库有两张表,checking和saving表。现在要从jane的支票账户里转账200美元到她的存款账户,那么至少需要三步:

1. 检查支票存款账户的余额是否大于200;

2. 从支票存款账户余额中减去200;

3. 在存款余额中增加200;

那么很简单,这三个步骤,如果只有其中一个执行了,那么将会出现钱不符合逻辑的情况发生,即一定要满足事务性,即要么全部执行,要么全部不执行。

下面来介绍事务中的ACID:

原子性:一个事务必须被视为一个单独的内部的不可分的工作单元,以确保整个事务要么全部执行,要么全部回滚;

隔离性:某个事务的结果只有在完成之后才对其他的事务可见。

一致性:即所以的操作完成需要满足一致性,不会影响数据的一致性,即数据库总是从一种状态转换到另一种一致性的状态

持久性:一旦一个事务提交,事务所做的数据改变将是永久的。

1.3.1 隔离级别

隔离的问题比我们想象的还要复杂,SQL下定义了四个隔离级别,用来限定事务内外的哪些改变是可见,哪些是不可见的。

简单介绍下四种隔离:

READ UNCOMMITED(读取未提交内容):所有的事务都可以看到未提交事务的执行结果,会出现脏读的情况,即事务还没有提交,就被读取了。

READ COMMITED (读取提交内容):一个事务开始时,只能看见提交提交的事务所做的改变,一个事务从开始到提交前,所做的任何数据改变都是不可见的,除非已经提交。这种隔离级别他也支持所谓的不可重复读,即用户运行同一个语句两次,查询的结果可能是不同的。

REPEATABLE READ(可重读):确保同一个事务的多个实例在并发读取数据时,会看到相同的数据行。不过会出现幻读的情况,即用户读取某一个范围的数据时,另一个事务又在该范围内插入了新行,当用户再次读取的时候就会出现幻读。在InnoDB的存储引擎中通过MVCC(多版本控制)机制解决了幻读的问题;

SERIALIZABLE(可串行化):是高级版的隔离级,他通过强制事务排序,使之不可能相互冲突,从而解决幻读的情况。简而言之就是在每行上加锁。

 1.3.2 死锁

1.4多版本并发控制

MVCC 通过及时的保存某些时刻的数据快照,从而得以实现。各自引擎实现实现MVCC的方式是不同的,列如乐观并发控制,悲观并发控制。举例简单的说明下:

InnoDb通过给每个数据行增加两个隐含值的方式实现MVCC,这两个隐含值记录了行的创建时间,以及它的过期时间,每一行都存储了事件发生时的系统版本号,用来替代事件发生时的实际时间。每次开启一个新事物的时候,版本号会自动增加。每个事物都会保存它在开始时的当前系统版本的记录,而每个查询都会根据事物的版本号,检查每行数据的版本号。如:

SELECT :InnoDb 检查每行数据,确保他们符合两个标准:

innodb只查找版本早于当前事物版本的数据行(也就是数据行的版本必须小于等于事物的版本),这确保了当前事务读取的行都是在事务开始前已经存在的,或者是当前事物创建和修改的行。

数据行的删除版本必须是未定义的,或者是大于事务版本的,这保证了事务读取的行,在事务开始之前是未被删除的;

只有满足上述两项测试的数据行,才会被当做查询结果返回。

INSERT:Innodb为每个新增行记录了当前系统版本号;

MVCC 只工作在REPEATABLE READ 和READ COMMITED 两个隔离级别上。其他的都不兼容;

加锁策略并发系统开销引擎
表级加锁最低最低MYISAM
行级加锁NDB cluster
支持MVCC的行级加锁最高最高InnoDB

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
资源包主要包含以下内容: ASP项目源码:每个资源包中都包含完整的ASP项目源码,这些源码采用了经典的ASP技术开发,结构清晰、注释详细,帮助用户轻松理解整个项目的逻辑和实现方式。通过这些源码,用户可以学习到ASP的基本语法、服务器端脚本编写方法、数据库操作、用户权限管理等关键技术。 数据库设计文件:为了方便用户更好地理解系统的后台逻辑,每个项目中都附带了完整的数据库设计文件。这些文件通常包括数据库结构图、数据表设计文档,以及示例数据SQL脚本。用户可以通过这些文件快速搭建项目所需的数据库环境,并了解各个数据表之间的关系和作用。 详细的开发文档:每个资源包都附有详细的开发文档,文档内容包括项目背景介绍、功能模块说明、系统流程图、用户界面设计以及关键代码解析等。这些文档为用户提供了深入的学习材料,使得即便是从零开始的开发者也能逐步掌握项目开发的全过程。 项目演示与使用指南:为帮助用户更好地理解和使用这些ASP项目,每个资源包中都包含项目的演示文件和使用指南。演示文件通常以视频或图文形式展示项目的主要功能和操作流程,使用指南则详细说明了如何配置开发环境、部署项目以及常见问题的解决方法。 毕业设计参考:对于正在准备毕业设计的学生来说,这些资源包是绝佳的参考材料。每个项目不仅功能完善、结构清晰,还符合常见的毕业设计要求和标准。通过这些项目,学生可以学习到如何从零开始构建一个完整的Web系统,并积累丰富的项目经验。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值