数据库事务处理简介 (数据库的事务处理)

随着各种应用系统的普及,数据库管理系统也在尽力满足各种用户需求,并试图为其提供更好的结果。为了保证数据的完整性和可靠性,数据库管理系统采用了事务处理的概念。数据库事务处理是一种保证不违反数据完整性、并发控制等问题的机制。本文将介绍数据库事务处理的概念、特性、行为以及其它相关问题。

1. 事务处理的概念

在数据库系统中,事务是指一组要么全部执行要么全部撤销的操作。例如,把一笔钱从银行账户转移到另一个账户,这个操作可能会包含几个步骤:验证源账户余额、扣除余额、验证目标账户是否存在、将余额存入目标账户中。在以上所有的步骤中,如果有任何一个步骤失败了,那么这笔交易就被视为失败,所有已经执行的步骤必须撤销。

2. 事务处理的特性

事务处理具有ACID四个特性,分别是原子性、一致性、隔离性和持久性。

原子性:事务对数据的所有操作要么全部成功,要么全部失败。如果事务执行失败,则系统将回滚所有对数据所做出的更改。

一致性:事务将数据从一种有效状态转移到另一种有效状态。在事务处理期间,数据的完整性一直得到维护,并且以一致的方式存储到数据库中。

隔离性:数据库系统保证不同事务之间相互隔离,互不干扰,且高并发条件下也不会出现数据错乱的情况。

持久性:一旦提交,事务就不可逆转,对数据的修改持久保存,并且对其它用户可见。

3. 事务处理的行为

在使用事务处理时,事务需要按照特定的模式和步骤进行。具体步骤如下:

(1)开始:该步骤开始执行指定事务的过程,并且预留资源,以便将数据更改保存到数据库中。

(2)执行操作:当开始事务后,用户就可以执行操作,例如修改数据。

(3)提交:如果所有操作执行成功,那么该事务将提交。在提交前,所有的修改将暂时存储于内存中。

(4)回滚:如果某个操作失败,那么该事务将中止。所有未提交的修改都将被回滚或抛弃。

4. 使用事务处理的好处

事务处理常常被用于需要加强数据完整性和可靠性的环境中。在使用事务处理时,可以同时处理多个数据操作,这样能够大大提高数据处理的效率。同时,事务处理也可以让应用更加健壮和安全。比如,当一个事务中的一个操作发生错误时,系统会自动回滚该事务并撤销所有的修改,这可以避免错误对数据造成的损失。

5. 注意事项

虽然使用事务处理可以提高系统的稳定性和数据的完整性,但还是需要注意一些问题。例如,当一个事务开始时,有必要预留一定的资源,因此事务处理可能使得机器的负载变高。此外,如果事务处理程序包含大量的操作,那么其性能可能会受到影响。在使用事务处理时,用户需要权衡其功能和性能,并且根据具体情况进行调整。

本文介绍了数据库事务处理的概念、特性、行为和一些注意事项。事务处理是现代数据库系统中一个非常重要的特性,它可以保证数据的完整性和可靠性,对应用程序的正确性和性能起着重要作用。使用事务处理需要注意其对数据库的影响,用户应该根据实际情况进行调整。

相关问题拓展阅读:

数据库事务的处理模型

事务有三种模型:

1.隐式事务是指每一条数据操作语句都自动地成为一个事务,事务的开始是隐式的,事务的结束有明确的

标记。

2.显式事务是指有显式的开始和结束标记的事务,每个事务都有显式的开始和结束标记。

3.自动事务是系统自动默认的,开始和结束不用标记。

并发控制

1. 数据库系统一个明显的特点是多个用户共享数据库资源,尤其是多个用户可以同时存取相同数据。

串行控制:如果事务是顺序执行的,即一个事务完成之后,再开始另一个事务

并行控制:如果DBMS可以同时接受多个事务,并且这些事务在时间上可以重叠执行。

2.并发控制概述

事务是并发控制的基本单位,保证事让塌务ACID的特性是事务处理的重要任务,而并发操作有可能会破坏其ACID特性。

DBMS并发控制机制的责任:

对并发操作进行正确调度,保证事务的隔离性更一般,确保数据库的一致性。

如果没有锁定且多个用户同时访问一个数据库,则当他们的事务同时使用相同的数据时可能会发生问题。由于并发操作带来的数据不一致性包括:丢失数据修改、读”脏”数据(脏读)、不可重复读、产生幽灵数据。

(1)丢失数据修改

当两个或多个事务选择同一行,然后基于最初选定的值更新该行时,会发生丢失更新问题。每个事务都不知道其它事务的存在。最后的更新将重写由其它事务所做的更新,这将导致数据丢失。如上例。

再例如,两个编辑人员制作了同一文档的电子复本。每个编辑人员独立地更改其复本,然后保存更改后的复本,这样就覆盖了原始文档。最后保存其更改复本的编辑人员覆盖了之一个编辑人员所做的更改。如果在之一个编辑人员完坦禅圆成之后第二个编辑人员才能进行更改,则可以避免该问题。

(2)读“脏”数据(脏读)

读“脏”数据是指事务T1修改某一数据,并将其写回磁盘,事务T2读取同一数据后,T1由于某种原因被除撤消,而此时T1把已修改过的数据又恢复原值,T2读到的数据与数据库的数据不一致,则T2读到的数据就为“脏”数据,即不正确的数据。

例如:一个编辑人员正在更改电子文档。在更改过程中,另一个编辑人员复制了该文档(该复本包含到目前为止所做的全部更改)并将其分发给预期的用户。此后,之一个编辑人员认为所做的更改是错误的,于是删除了所做的编辑并保存了文档。分发给用户的文档包含不再存在的编辑内容,并且这些编辑内容应认为从未存在过。如果在之一个编辑人员确定最终更改前任何人都不能读取更改的文档,则可以避免该问题。

( 3)不可重复读

指事务T1读取数据后,事务T2执行更新操作,使T1无法读取前一次结果。不可重复读包括三种情况:

事务T1读取某一数据后,T2对其做了修改,当T1再次读该数据后,得到与前一不同的值。

(4)产生幽灵数据

按一定条件从数据库中读取了某些记录后,T2删除了其中部分记录,当T1再次按相同条件读取数据时,发现某些记录消失

T1按一定条件从数据库中读取某些数据记录后,T2插入了一些记录,当T1再次按相同条件读取数据时,发现多了一些记录袭兄。

如何以事物的方式对数据库进行访问

一 事务的概念

事务是由相关操作构成毁散宏的一个完整的操作单元。两次连续成功的COMMIT或ROLLBACK之间的操作,称为一个事务。在一个事务内,数据的修改一起提交或撤销,如果发生故障或系统错误,整个事务也会自动撤销。

oracle的数据语音分为数据定义语言(DDL)、数据控制语言(DCL)和数据操纵语言(DML)。其中的DML语言会生成事务,其他两种语言只要执行,事务就会结束。

简单的说DML语言可以建立事务,DDL和DCL不能建立事务。

DML语言包括几个命令,例如 select insert delete update等等,这些命令执行后,当前用户的显示信息是更改了,但是其他人访问你改的表的时候数据并没有更改,需要使用commit确认后才能更改。如果当前用户在没有执行commit前反悔操作了,那使用rollback命令可以回退到执行操纵语句之前,但是如果已经执行了commit语句是无法回退的。

比如,我们去银行转账,操作可以分为下面两个环节:

(1) 从之一个账户划出款项。

(2) 将款项存入第二个账户。

在这个过程中,两个环节是关联的。之一个账户划出款项必须保证正确的存入第二个账户,如果第二个环节没有完成,整个的过程都应该取消,否则就会发生丢失款项的问题。整个交易过程,可以看作是一个事物,成功则全部成功,失败则需要全部撤消,这样可以避免当操作的中间环节出现问题时,产生数据不一致的问题。

一个事务是由一个可执行的SQL语句开始,一个可执行SQL语句产生对实例的调用。在事务开始时,被赋给一个可用回滚段,记录该事务的回滚项。一个事务以下列任何一个出现而结束。数据库事务是一个逻辑上掘蠢的划分,有的时候并不是很明显,它可以是一个操作步骤,也可以是多个操作步骤。

我们可纤册以这样理解数据库事物:对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。

以事务的方式对数据库进行访问,有如下的优点:

* 把逻辑相关的操作分成了一个组。

* 在数据永久改变前,可以预览数据变化。

* 能够保证数据的读一致性。

二 数据库事务的应用

数据库事务处理可分为隐式和显式两种。显式事务操作通过命令实现,隐式事务由系统自动完成提交或撤销(回退)工作,无需用户的干预。

隐式提交的情况包括:当用户正常退出SQL*Plus或执行CREATE、DROP、GRANT、REVOKE等命令时会发生事务的自动提交。

还有一种情况,如果把系统的环境变量AUTOCOMMIT设置为ON(默认状态为OFF),则每当执行一条INSERT、DELETE或UPDATE命令对数据进行修改后,就会马上自动提交。设置命令格式如下:

SET AUTOCOMMIT ON/OFF

隐式回退的情况包括:当异常结束SQL*Plus或系统故障发生时,会发生事务的自动回退。

显式事务处理的数据库事务操作语句有3条,分别是COMMIT,ROLLBACK,SAVEPOINT语句。

COMMIT是数据库事物提交,将变化写入数据库。此操作把多个步骤对数据库的修改,一次性地永久写入数据库,代表数据库事务的成功执行。ROLLBACK是数据库事务回退,撤销对数据库的修改。操作在发生问题时,把对数据库已经作出的修改撤消,回退到修改前的状态。在操作过程中,一旦发生问题,如果还没有提交操作,则随时可以使用ROLLBACK来撤消前面的操作。SAVEPOINT则用于在事务中间建立一些保存点,ROLLBACK可以使操作回退到这些点撤上边,而不必撤销全部的操作。一旦COMMIT完成,就不能用ROLLBACK来取消已经提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必须重新执行相关操作语句。

如何开始一个新的事务呢?一般情况下,开始一个会话(即连接数据库),执行之一条SQL语句将开始一个新的事务,或执行COMMIT提交或ROLLBACK撤销事务,也标志新的事务的开始。另外,执行DDL(如CREATE)或DCL命令也将自动提交前一个事务而开始一个新的事务。

数据在修改的时候会对记录进行锁定,其他会话不能对锁定的记录进行修改或加锁,只有当前会话提交或撤销后,记录的锁定才会释放。

例如修改雇员SCOTT的工资,工资在原有基础上增加1000:

UPDATE emp SET sal=sal+1000 WHERE empno=7788;

执行结果:

已更新 1 行。

显示修改后SCOTT的工资:

SELECT ename,sal FROM emp WHERE empno=7788;

执行结果:

ENAME SAL

SCOTT 4000

经查看修改结果正确,提交所做的修改:

COMMIT;

执行结果:

提交完成。

在执行COMMIT后,工资的修改被永久写入数据库。本训练的第1步,先使用COMMIT命令提交原来的操作,同时标志一个新的事务的开始。注意:在事务执行过程中,随时可以预览数据的变化。对于比较大的事务,可以使用SAVEPOINT命令在事务中间划分一些断点,用来作为回退点。

数据库的事务处理的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于数据库的事务处理,数据库事务处理简介,数据库事务的处理模型,如何以事物的方式对数据库进行访问的信息别忘了在本站进行查找喔。


数据运维技术 » 数据库事务处理简介 (数据库的事务处理)