来自云龙湖轮廓分明的月亮 发表于 2024-7-29 12:54:01

数据库——事务管理

title: 数据库——事务管理
date: 2024-07-06 11:55:39
tags: 数据库
categories: 数据库
cover: /image/T1.jpg
description: 数据库的事务管理的相干知识

事务管理

事务管理是对一系列数据库操作举行管理的过程,这些操作被视为一个不可分割的工作单元(原子单元)。事务管理在数据库体系中起着至关重要的作用,它确保了数据的一致性和完整性,防止了数据在并发操作中出现不一致或损坏的情况。
事务的界说

事务是数据库管理体系中的一个概念,用于管理一组数据库操作,使它们作为一个不可分割的工作单元实行。一个事务可以包含一个或多个SQL语句,这些语句要么全部实行成功,要么全部回滚(取消),从而确保数据库的数据一致性和完整性。
事务的特性(ACID)

事务具有四个基本特性,即原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和长期性(Durability),这四个特性通常简称为ACID。


[*]原子性:事务是一个原子操作,由一系列动作构成。事务的原子性确保这些动作要么全部完成,要么完全不起作用,从而避免了部分成功、部分失败的情况。
[*]一致性:事务必须使数据库从一个一致性状态转换到另一个一致性状态。这意味着事务的实行不会粉碎数据库的约束和规则,确保数据的正确性。
[*]隔离性:事务的隔离性确保了多个并发事务之间的隔离,避免了数据交叉访问和干扰,保证了每个事务的独立性。不同的隔离级别会影响事务的并发性能和一致性保证水平。
[*]长期性:一旦事务被提交,其对数据库的更改就会长期保存,即使体系瓦解也不会丢失。这确保了事务的更改能够长期保存并供后续操作使用。
事务管理的作用

事务管理的作用主要表现在以下几个方面:


[*]保证数据的一致性:通过确保事务的原子性,事务管理可以防止因部分操作失败而导致的数据不一致问题。
[*]确保数据的完整性:事务的ACID特性共同作用,确保数据的完整性和正确性,防止数据丢失或损坏。
[*]提供隔离性:通过控制事务的隔离级别,事务管理可以避免不同事务之间的干扰和冲突,保证每个事务的独立性。
[*]支持并发操作:在并发情况下,事务管理通过并发控制和恢复机制,确保多个事务能够同时实行而不相互干扰。
事务管理的实现方式

在不同的数据库管理体系中,事务管理的实现方式可能有所不同。但一般来说,事务管理包罗并发控制和恢复两部分。


[*]并发控制:并发控制涉及到多个事务对数据库的某个公共部分举行同时存取的自动控制。为了进步死锁检测的效率,尽早发现“隐藏”的死锁,并发控制机制会有用地表示各种等待关系,并处理死锁等并发问题。
[*]恢复:恢复机制用于在事务失败或体系瓦解时恢复数据库到一致性状态。这通常包罗取消(Undo)和重做(Redo)两个步调。取消操作用于回滚事务的更改,而重做操作则用于重新实行那些因体系瓦解而未能完成的事务。
事务状态


[*]数据库事务的状态描述了事务在其生命周期中所处的不同阶段。根据多个来源的信息,数据库事务的状态通常包罗以下几种:


[*]活动的(Active):事务对应的数据库操作正在实行过程中,此时势务处于活动的状态。这是事务的初始状态,表示事务已经开始实行,但尚未完成。
[*]部分提交的(Partially Committed):事务内部末了一个操作实行结束,但此时数据更新处于内存级别,还未革新到磁盘中,称事务处于部分提交的状态。在这个阶段,事务的修改已经在内存中完成,但还没有被永久保存到磁盘上。
[*]失败的(Failed):当事务处在活动的或者部分提交状态时,可能遇到了某些错误(如数据库自身的错误、操作体系错误或直接断电)而无法继承实行,或者人为停止当前事务的实行,此时势务处于失败的状态。
[*]中断的(Aborted):事务处于失败状态时,会举行回滚操作,即将数据库恢复到事务实行前的状态,回滚后事务处于中断的状态。这是事务处理失败后的终极状态,表示事务的全部修改都已被取消,数据库回到了事务开始之前的状态。
[*]提交的(Committed):当一个处在部分提交的状态的事务将修改过的数据从内存同步到磁盘之后,该事务就处于提交的状态。这是事务处理成功的终极状态,表示事务的全部修改都已被永久保存到数据库中。

[*]事务状态的转换通常遵照以下规则:


[*]事务从活动的状态开始实行。
[*]假如全部操作都成功完成并准备将结果写入磁盘,则事务进入部分提交的状态。
[*]假如在部分提交之前遇到错误,事务将进入失败的状态,并随后被中断(回滚)。
[*]假如全部操作都成功完成并成功将数据写入磁盘,则事务进入提交的状态。
事务之间的相互影响

事务之间的相互影响主要表现在数据库操作中,特别是在并发情况下,多个事务可能同时访问和修改雷同的数据,从而导致一系列问题。这些相互影响主要包罗以下几种情况:


[*] 脏读(Dirty Read):
脏读是指一个事务读取了另一个事务未提交的数据。由于这些数据尚未被提交,因此是有可能回滚的。假如读取数据的事务基于这些未提交的数据举行了进一步的操作,那么当这些未提交的数据被回滚时,基于这些数据的操作就会变得无效或错误。脏读粉碎了事务的隔离性。
[*] 不可重复读(Non-repeatable Read):
不可重复读是指在数据库访问中,一个事务范围内两个雷同的查询却返回了不同的数据。这是由于查询时体系中其他事务修改的提交而引起的。即使两个查询完全雷同,但由于其他事务的介入,导致查询结果发生了变革。不可重复读同样粉碎了事务的隔离性,使得事务的多次读取结果不一致。
[*] 幻读(Phantom Read):
幻读是指当事务不是独立实行时发生的一种现象。例如,第一个事务对一个表中的数据举行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,但这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中另有没有修改的数据行,就好象发生了幻觉一样。幻读也是由于并发事务的介入导致的,它粉碎了事务的隔离性,使得事务在多次读取同一数据集适时,看到的数据集合发生了变革。
[*] 丢失更新(Lost Update):
丢失更新是指两个事务同时读取同一条记录,A先修改记录,B也修改记录(B是不知道A修改过的),B提交数据后B的修改结果覆盖了A的修改结果。这种情况下,A的更新被B的更新所覆盖,导致A的更新丢失。丢失更新同样是由于并发事务的介入导致的,它粉碎了事务的原子性和一致性。
事务的隔离级别

为相识决事务之间的相互影响,数据库体系提供了事务隔离级别的概念。事务隔离级别决定了事务之间的可见性和一致性水平。常见的事务隔离级别包罗:


[*]读未提交(Read Uncommitted):允许事务读取未被其他事务提交的变更,这可能导致脏读、不可重复读和幻读。
[*]读已提交(Read Committed):确保事务只能读取已经被其他事务提交的变更,这可以避免脏读,但不可重复读和幻读仍可能发生。
[*]可重复读(Repeatable Read):确保在同一个事务中多次读取同样记录的结果是一致的,这可以避免脏读和不可重复读,但幻读仍可能发生(在某些数据库体系中,如MySQL的InnoDB存储引擎,通过多版本并发控制MVCC可以进一步避免幻读)。
[*]串行化(Serializable):这是最高的隔离级别,它通过欺压事务串行实行来避免脏读、不可重复读和幻读。但这种方式会大大降低数据库的并发性能。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: 数据库——事务管理