MYSQL几个基础概念,你都知道吗?

MySQL服务器架构分为三层:

第一层:主要提供连接处理、授权认证、安全等基本处理

第二层:是比较核心的一层,提供包括查询解析、SQL分析、SQL优化、缓存以及所有内置函数,像存储过程、触发器、视图等跨存储引擎的功能也都在这一层实现

第三层:是存储引擎,主要负责数据的存储和提取,上一层通过API和存储引擎进行通信,存储引擎只实现了例如“开始一个事务”或“根据主键提取一行记录”等基本的API函数,其他复杂的功能都由上一层实现。

事务的ACID概念

ACID表示原子性(atomicity)、一致性(consistency)、隔离性(isolation)和持久性(durability)

原子性(atomicity):在一个事务中的操作被视为一个不可分割的最小工作单元,这个事务中的操作要么全部提交成功,要么全部失败回滚,对于一个事务来说,不可能只执行其中的一部分操作,这就是事务的原子性。

一致性(consistency):数据库总是从一个一致性的状态转换到另外一个一致性的状态。通俗的和说就是数据库中的数据只有在事务提交之后才最终改变,如果事务没有提交,事务中所做的修改也不会保存到数据库中。

隔离性(isolation):一个事务所做的修改在最终提交以前,对其他事务是不可见的。即事务和事务之间是相互隔离的,当然这也不是绝对的不可见,还需要看具体的事务隔离级别,不同的隔离级别会有一些区别。

持久性(durability):一旦事务提交,则其所做的修改就会永久保存到数据库中。即使系统崩溃,修改的数据也不会丢失。

事务的隔离级别

READ UNCOMMITTED(脏读或未提交读):在READ UNCOMMITTED级别,事务中的修改,即使没有提交,对其他事务也都是可见的。事务中读取到了其他事务未提交的数据,会导致很多问题。从性能上来说,也不会比其他的级别好太多,所以除非真的有非常必要的理由,在实际应用中一般很少使用。

READ COMMITED(提交读或不可重复读):一个事务开始时,只能看到已经提交的事务所做的修改。也就是说,一个事务从开始到提交之前,所做的任何修改,对其他事务都是不可见的,这会导致,在同一个事务中,先后执行两次相同的查询,得到的结果是不一样的。

REPEATABLE READ(可重复读):保证了在同一个事务中多次读取同样记录的结果是一致的。该级别解决了脏读和不可重复读的问题,但是还是无法解决幻读的问题,即在查询某个范围内的记录时,另外的事务在该范围内插入了新的记录,导致查询记录的条数出现变化,要解决幻读的问题,除了调整事务隔离级别,另外的办法就是加间隙锁。

SERALIZABLE(可串行化):该级别强制事务串行执行,从而避免了前面说的幻读的问题。简单来说,SERALIZABLE会在读取的每一行数据上都加锁,这就可能导致大量的超时和锁争用的问题。所以在实际应用中很少会用到这个隔离级别,只有在非常需要确保数据一致性而且可以接受没有并发的情况下,才考虑采用该级别。

文章内容整理而来,如有错误,欢迎指正。

  • 发表于:
  • 原文链接:http://kuaibao.qq.com/s/20180312A0P8AV00?refer=cp_1026
  • 腾讯「云+社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。

扫码关注云+社区

领取腾讯云代金券