首页 > 百科知识 正文

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)

时间:2023-11-21 19:29:52 阅读:948 作者:逝回漠然

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第1张

现在的很多ORM框架对于事务的支持都是比较完善的,因为在很多的业务系统中事务是不可或缺的操作,通过事务操作开发者可以很容易保证数据的一致性,接下来我们就来看看关于数据库事务管理相关的内容。

什么是事务?

在Java应用程序中对事务的定义可以理解为一种保证单一数据源操作情况下的数据一致性机制,如下图所示,可以抽象理解为对于一组连续的数据库读写操作的控制,这些操作要不全部都成功,要不就是全部都不成功,不会出现部分成功部分失败的情况。例如你去书店买了一本书,你只能买一本书,而不能先买前200页,后买后300页。

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第2张

在对关系型数据库操作的时候,所有的SQL语句都必须在一个事务的执行范围中进行控制,如果在操作的时候没有对事务的边界进行定义,那么数据库就会对每次的操作自动添加一个事务。事务操作开始于SQL操作执行之前,结束于SQL执行完毕之后,对于每个数据库事务来讲,可以被提交也可以进行回滚。

事务操作的四大特征

Atomicity,原子性

事务的原子性是指将多个操作看做一组操作执行,那么只有当前组的所有信息执行成功之后,整个事务才会执行成功。如果在执行过程中,当前执行组内任意一个操作执行失败,那么其他操作也将全部回滚,整个事务操作也会执行失败。

Consistency,一致性

事务的一致性是指,在每一次提交事务的过程中,数据库的所有约束都要被强制遵守,并且不可违背,包括主键约束、数据类型等等。

Isolation,隔离性

事务隔离性是指,如果在某次操作过程中并发执行了多个事务,其最后所展示的结果与调用事务执行的顺序是相同的,也就是说并行事务之间数据是可见的,但是操作是隔离的。

Durability,持久性

事务持久性是指,对每个操作成功的事务来讲,对于数据的修改是永久改变的的,并且这些改变都会被记录到一个持久化日志中,如果系统发生了宕机,就可以根据这些持久化日志进行数据恢复操作。

事务隔离级别

根据上面的描述我们知道事务具有隔离性的特征,以此特征来保证数据在并发事务的时候的数据一致性。根据规范我们将事务的并发控制划分了不同的级别,称之为事务隔离级别。标准的事务隔离级别有如下几种。

  • READ_UNCOMMITED
  • READ_COMMITED
  • REPEATABLE_READ
  • SERIALIZABLE

在介绍事务隔离级别之前,首先我们先来了解一下关于数据一致性的三个相关定义

脏读

如图所示,就是当前事务在执行数据操作的时候还没有进行最后的Commit操作,这个时候就会有其他事务来对相关数据进行并发访问。但是由于后续的操作中出现了问题,导致事务回滚了,那么这个时候已经读取到的数据就成了脏数据。从而产生了数据脏读的现象。

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第3张

不可重复读

如图所示,如果两个事务对同一条数据进行读取,这个时候其中一个事务对数据进行了修改操作,这个时候当另一个事务读取该数据的时候就不是自己想要的数据了,这个时候如果执行了相关的操作就会导致数据不一致的情况出现,所以在实际操作中我们通过读锁的方式来控制并发读,防止这种问题出现。

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第4张

幻读

如图所示,当一个事务正在从数据库中读取一批数据,在没有读取完成之前,有一个新的事务又往数据库中新添加了一批数据,而且这些新的数据是满足Transactions1的读取条件,这个时候,由于第一次的事务读取不会包含第二次事务提交的数据,这种情况我们就将其称为是幻读。

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第5张

说完上面的三个概念,这个时候我们来看不同的事务隔离级别对于并发控制范围的支持。如下图所示

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第6张

当然了,不同的数据库也有自己对应的不同的数据库默认隔离级别,如下图所示

互联网面试-关于数据库事务管理的四大特征(数据库中的事务操作分几步)-第7张

总结

在实际开发过程中,为了保证数据的一致性,我们要根据实际情况对数据库的隔离级别做出调整。实际上在大多数系统中,数据库的处理能力与系统本身对于并发的支持都会影响到数据库隔离级别的设置。

在设计系统的时候如果业务场景有高并发的特征,那么就要牺牲一部分的数据一致性,这样隔离级别就会相对降低,而如果在有些系统中对于数据的一致性要求较高的情况下,那么数据库的隔离级别就要相对调高一些,这样做系统的处理能力会下降,但是,数据的一致性会提高。

,

版权声明:该问答观点仅代表作者本人。如有侵犯您版权权利请告知 cpumjj@hotmail.com,我们将尽快删除相关内容。