假设存在“Bank_Account”表并包含单个列“余额”,其中每个人的余额=100。
如果交易执行“update Bank_Account set Balance = 200 where 1=1; commit;” 是否有可能任意 2 个事务在 Bank_Account 表上执行选择,其中一个事务读取 200,另一个事务读取不同银行帐户的 100?
或者,一旦给定银行帐户返回 200,所有其他帐户也必然返回 200,因为提交是原子的?
我的数据库直觉是,一旦一个人读取 200,所有其他人都必须读取 200,因为事务是原子的,但我还了解到某些选择可以在不锁定表或行的情况下执行,并在事务开始时返回数据快照,即使假设读已提交隔离级别。
如果是这样的话,数据库如何在没有锁的情况下实现这种行为呢?提交和选择执行了什么魔法来确保选择同时对提交的原子行为进行操作?
谢谢