这篇主要介绍数据库事务中的隔离性,全篇从大概念入手到数据库事务隔离性的一般设计理念以及要面对的挑战。
本篇纯码字,不过其中有区分很多博客上易混淆且常出错的概念,欢迎交流。
一,理解事务
事务是由一系列对系统中数据进行访问与更新的操作组成的一个程序执行逻辑单元。在数据库中,事务被赋予了更重要的意义:一方面数据库肯定要面对多并发的情况,多个应用程序同时发来请求,事务在这些应用程序中起到隔离的作用;另一方面事务也提供了回滚的能力,可以快速应对各种原因造成的事务失败,在尽量保证可用性的同时,提供服务的数据一致性。
假如,你想使用一个数据库服务。最开始你使用的是单机数据库(集中式系统),你开始设计你的数据库如何处理数据
经过大量的设计实践,我们总结了数据库事务的以下特性:我的这一系列操作希望给他封装成一个整体,要不全完成,要不不完成(原子性);事务如果因为什么原因中断,我们希望数据库的状态也是稳定一致的,而不是一半事务操作完的数据残留在数据库中(一致性);在并发环境中,各个事务即使操作相同数据也不相互干扰(隔离性);而且事务一旦提交,对数据库的改变我们希望是永久性的(持久性)
二,事务的隔离级别
我们着重关注在这里的事务隔离性(ACID中的隔离性)
并发环境中,事务不能互相干扰。为了保证不同事务操作数据时和其他事务是隔离的,互不干扰,在标准SQL规范中,定义了四个事务隔离级别,不