Chr*_*ver 16
我们有一个联合银行账户,余额为200美元
我去自动取款机并将我的卡放入机器,机器检查我有200美元的余额
与此同时,你进入银行并要求50美元,出纳员提出你的帐户,并确认你有钱.
我要求提款200美元,机器数我的钱给我200美元,我的余额为0美元
出纳员计算你的钱并给你50美元,然后系统将账户余额更新为150美元(200美元 - 50美元撤回).
所以现在我们有250美元的现金和150美元的账户.200美元的利润.
数据库应该使用锁来防止两个事务同时发生.
问题是,如果以这种方式处理每个事务,那么我们将失去并发性并且性能会受到影响,因此transaction isolation levels根据场景使用的不同,例如,您可能不关心有人可以修改已读取的数据交易.
http://en.wikipedia.org/wiki/Isolation_%28database_systems%29
您应该了解这些并了解它们适用的场景.
锁定对于避免两个用户同时修改数据至关重要.您可能认为这不太可能,但根据应用程序,如果不同用户经常更改相同的数据,则存在重大风险.
想象一下如下情况而不使用锁:John打开他的屏幕(他不知道他正在使用数据库,他只是一个正在看漂亮屏幕的最终用户),修改了一些数据,然后点击"保存".假设John在9:30打开屏幕,然后在9:32保存数据.
然而,玛丽在9点29分打开了完全相同的屏幕和相同的记录.她当时看到约翰在9:30做的相同数据.然后,她更新了记录,并在9:31点击"保存".
保存了哪些数据?约翰或玛丽?
玛丽高兴地继续处理其他记录,当她稍后回来打开记录时,她发现她的变化已经丢失了,她看到了约翰的变化!
请注意,必须明智地使用锁定以防止意外的副作用.例如,假设您的程序在每次打开它时都会锁定记录进行更改.如果John锁定了记录,并且会话屏幕打开以便吃午饭或者他失去联系,会发生什么?锁可以长时间保持在那里,锁定和不可更改,同时禁止其他人改变(甚至查看)该记录.其他考虑因素可能是性能,因为数据库锁定和解锁记录的时间可能会因大量事务而变得明显.
了解锁定对于维护满意的用户和数据完整性至关重要.请查看文档.
| 归档时间: |
|
| 查看次数: |
4882 次 |
| 最近记录: |