当前位置: 首页 > 教程 > 数据库管理系统 >

DBMS事务

精华
小牛编辑
172浏览
2023-03-14
  • 事务是一组逻辑相关的操作,它包含一组任务。
  • 事务是一个动作或一系列动作,它由单个用户执行以执行访问数据库内容的操作。

示例: 假设银行员工从X的帐户向Y的帐户转账800元,这个小事务包含几个低级任务:

X 的帐户

Open_Account(X)  
Old_Balance = X.balance  
New_Balance = Old_Balance - 800  
X.balance = New_Balance  
Close_Account(X)

Y 的帐户

Open_Account(Y)  
Old_Balance = Y.balance  
New_Balance = Old_Balance + 800  
Y.balance = New_Balance  
Close_Account(Y)

事务操作:

以下是交易的主要操作:

  • 读(X):读操作用于从数据库中读取X 的值并将其存储在主存储器的缓冲区中。
  • 写(X):写操作用于将值从缓冲区写回数据库。

举一个例子来从一个帐户中扣除交易,该帐户包含以下操作:

第1步.  R(X);  // 读取
第2步.  X = X - 500;  // 扣除操作
第3步.  W(X);  // 更改写入

假设在开始交易之前X的值是4000

  • 第一个操作从数据库中读取X的值并将其存储在缓冲区中。
  • 第二个操作将X的值减少500,因此缓冲区将包含3500
  • 第三个操作将缓冲区的值写入数据库。 所以X的最终值将是3500

但有可能由于硬件,软件或电源等的故障,交易可能在完成集合中的所有操作之前失败。

例如:如果在上述交易中,借方交易在执行操作的第2步后失败,那么X的值将在数据库中保持为4000,这是银行无法接受的。

要解决这个问题,有两个重要的操作:

提交 :用于永久保存工作。
回滚 :用于撤消已完成的工作。