数据库问题-事务



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

我知道它与交易有关,但不完全确定它意味着什么?

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

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

假设您有一个银行应用程序,但您没有使用交易。您打算将资金从一个帐户转移到另一个帐户,然后先执行类似update balance set value = value + $20 where account = account2的操作,然后执行update balance set value = value - $20 where account = account1。现在让我们假设这些查询之间发生了一些不好的事情(服务器崩溃,提交查询的客户端崩溃,甚至另一个客户端在中间处理查询并将事情搞砸)。。。你的数据库有问题。

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

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

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

  • 处理表A中的1请求数据
  • 处理表A中的2个请求数据
  • 过程1更新表A中的数据
  • 过程2使用表A中未更新的数据进行详细说明

这在过程2的结果中引入了不一致性。

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

这个问题的典型解决方案是在第一步中在表A中引入,直到进程1结束(使用COMMIT或ROLLBACK),这样其他进程就不能使用相同的资源,直到锁释放为止。

最新更新