如果我有2个客户端访问相同的属性,请执行以下操作:
c1 UPDATE ACCOUNT set balance = balance + 3000
where NUM_ACCOUNT = 12390
c2 UPDATE ACCOUNT set balance = balance - 1500
where NUM_ACCOUNT = 12390
假设最初的余额 10,000欧元,最终价值是多少?
答案 0 :(得分:1)
在两次transactions提交后,它将€11.500,00 (除非发生非常讨厌的事情)。
由于您没有标记特定的DBMS,我将链接到Oracle和MS-SQL文档以及维基百科中的引用。如果你想深入了解现代relational database systems如何处理这个问题,你有很多东西可以阅读。
好消息是DBMS(任何体面的)都会让你对事物透明,而且你不需要打扰它,并且必须避免搞乱任何交易选项(阅读uncommited,快照等),除非你我非常清楚你在这里做了什么。
基本上系统将接收这两个交易并逐一提交,试图避免deadlocks和其他concurrency问题并尊重locks。
答案 1 :(得分:1)
关系数据库实现了一个名为ACID properties的东西。基本上,这可以确保每个用户都能看到一致的数据视图,就像用户事务是独立运行一样。这种一致性(好的,“一致性”在技术上是四个属性中的第二个)是关系数据库用于更改数据的应用程序的关键原因。
因此,如果您的设置是针对ACID合规性设置的(它们应该是,但它们可以被覆盖),那么结果将是+1500。