https://habr.com/en/company/postgrespro/blog/467437/ 给出了以下丢失更新的示例:
例如,两笔交易将把同一账户的金额增加 100 欧元(? 是俄罗斯卢布的货币符号)。第一个事务读取当前值 (?1000),然后第二个事务读取相同的值。第一个交易增加了金额(这给出了 ?1100)并写入了这个值。第二个事务的行为方式相同:它获得相同的 ?1100 并写入该值。结果,客户损失了?100
我读了几次。但我不明白客户是如何丢失P100的。请解释。
为什么:
select 1 FROM DUAL
UNION ALL
select 1 FROM DUAL
MINUS
SELECT 2 FROM DUAL
Run Code Online (Sandbox Code Playgroud)
在 Oracle 中只返回单行1
而不是 2 行1
?
Postgres 的文档说明:
虽然访问存储在物化视图中的数据通常比直接或通过视图访问底层表快得多,但数据并不总是最新的;
https://www.postgresql.org/docs/9.6/rules-materializedviews.html
为什么它“通常要快得多”?