数据库事务、隔离级别到底是什么?实现原理是什么?

1.数据库事务

        根据百度百科,数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。事务由事务开始与事务结束之间执行的全部数据库操作组成。

        其实transaction也可以翻译成交易,比如大家耳熟能详的银行转账交易。交易成功的核心就在于A账户的转出操作与B账户的转入操作是否都能成功。

 

2.事务四大特性简介

        众所周知,事务还有ACID四大特性,分别为原子性,一致性,隔离性和持久性。下面简述一下四大特性:

        1)原子性:事务的定义中就包含了这个概念,即事务中包含的操作必须保证全部执行,不能部分执行。

        2)一致性:如果事务中的操作全部执行或者全部不执行,我们可以说此时的数据是保持一致性的,只不过如果全部成功,是从一种一致性到另外一种一致性;如果全部失败,数据也是一致的,即与事务开始前的数据保持一致。后面讲到一致性的实现时会再具体阐述。

        3)隔离性:比如现在有两个事务T1和T2,假设T1先开始,T2后开始,并且两个事务中都会用到数据D,那么针对于在T2执行期间能否看到T1操作后的数据D的问题,则是后面会提到的隔离级别的问题,此问题涉及到事务的隔离性。

        4)持久性:凡是提到持久性,必然涉及到将数据写入磁盘的操作,以避免断电导致的数据丢失问题。

        以上关于事务的定义和事务的四大特性只是概念性的描述,网上随便一搜都能找到,但是要想真正理解事务及其特性,就不得不了解其实现原理。如果想要彻底了解,需要先把知识分层,上面提到的事务及其四大特性是数据库原理层面的,也就是说无论用的是MySQL还是其他诸如Oracle或者是其他数据库,事务的概念和特性是一样的,但是具体到某一种DBMS(即常说的数据库软件例如MySQL),其实现细节会有所区别。

 

3.原子性,一致性和持久性实现原理

        下面以MySQL为例,详细描述一下MySQL是如何实现原子性,一致性,隔离性和持久性的。在具体讲MySQL的四大特性的实现原理之前,我们首先对MySQL是什么做个简单的定义,MySQL=程序+文件(配置文件,日志文件,数据文件)。简单来说MySQL是一个软件,此软件是由管理数据的程序和各种文件组成的,其中文件又包含了不同的类别。所以我们常见的CRUD操作,本质上就是通过程序创建,检索,更新或者删除文件

        在讲之前,我们先来想一下如果让你来实现原子性和一致性,你会怎么做?假设现在有一个事务,包含A,B,C三个插入操作,假设执行到C时,程序出错,那么此时数据文件中只包含了A和B两个操作的数据。之前已经讲过,原子性的含义是全部执行或者全部不执行,那显然如果我们能捕获程序错误,然后回滚A和B操作,或者重试C操作,那么就能保证原子操作。那么如何回滚A和B?又如何重试C呢?我们可以把回滚信息存入文件,把事务信息也存入文件。MySQL的做法就是将事务信息写入redo log(即重写日志),而回滚信息写入undo log(即回滚日志)。所以通过redo和undo日志文件,MySQL实现了事务的原子性和一致性。其实此处的一致性只是保证了事务不会只被执行一部分操作,并不能保证事务一定会执行。之所以这么说是因为MySQL为了保证一致性,会先将redo日志写入磁盘,然后再写入数据文件,假如在写数据文件时MySQL挂掉了&

  • 5
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值