Database 数据库问题-事务

Database 数据库问题-事务,database,Database,数据库处于不一致状态意味着什么 我知道它与事务相关,但不完全确定它的含义是什么?这意味着数据不一致,可能是因为某些表在未更新相关表的情况下进行了更新。这通常可能意味着几件事:损坏的数据库文件(在Access中经常发生)或者事务仍在处理中或未完成,或者与数据库相关的文件处于打开状态。一旦“工作”完成,状态应返回到“一致”。假设您有一个银行应用程序,并且您没有使用交易。您打算将资金从一个帐户转移到另一个帐户,首先执行类似于更新余额集值=值+20美元,其中account=account2,然后执行更新

数据库处于不一致状态意味着什么


我知道它与事务相关,但不完全确定它的含义是什么?

这意味着数据不一致,可能是因为某些表在未更新相关表的情况下进行了更新。

这通常可能意味着几件事:损坏的数据库文件(在Access中经常发生)或者事务仍在处理中或未完成,或者与数据库相关的文件处于打开状态。一旦“工作”完成,状态应返回到“一致”。

假设您有一个银行应用程序,并且您没有使用交易。您打算将资金从一个帐户转移到另一个帐户,首先执行类似于
更新余额集值=值+20美元,其中account=account2
,然后执行
更新余额集值=值-$20,其中account=account1
。现在让我们说在这些查询(服务器崩溃、提交查询崩溃的客户机,或者甚至另一个客户端进入中间查询并弄乱事情)之间发生了一些不好的事情……你的数据库有问题

对于事务,您的多个查询将是原子的。那就是。。要么全部,要么什么都不做——在提交完整事务之前,没有其他客户端可以看到您的部分更改,并且数据库不会记录一个更改而不记录另一个更改


余额多少有些琐碎和人为的,但是当向多个表添加多个条目时,同样的问题很容易发生,每个条目都是相关的。

典型情况发生在具有并发进程的事务环境中,解释如下:

  • 处理表A中的1个请求数据
  • 处理表A中的2请求数据
  • 流程1更新表A中的数据
  • 过程2使用表A中未更新的数据进行详细说明
这导致过程2的结果不一致

例如,进程2可能尝试更新表A中的数据:因此进程1所做的更新将丢失

解决这个问题的一个典型方法是在第一步引入表A中的锁,直到进程1结束(提交或回滚),这样其他进程在释放锁之前不能使用相同的资源