数据库处于不一致状态意味着什么?
我知道它与交易有关,但不完全确定它意味着什么?
这意味着数据不一致,可能是因为某些表在没有更新相关表的情况下进行了更新。
这通常可能意味着一些事情:数据库文件损坏(在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),这样其他进程就不能使用相同的资源,直到锁释放为止。