什么是MySQL中的锁定以及何时使用它?

Imr*_*ran 13 mysql rdbms

什么是MySQL(或任何RDBMS)中的锁定以及何时使用它?使用示例的Layman解释会很棒!

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

您应该了解这些并了解它们适用的场景.


lui*_*ado 7

锁定对于避免两个用户同时修改数据至关重要.您可能认为这不太可能,但根据应用程序,如果不同用户经常更改相同的数据,则存在重大风险.

想象一下如下情况而不使用锁:John打开他的屏幕(他不知道他正在使用数据库,他只是一个正在看漂亮屏幕的最终用户),修改了一些数据,然后点击"保存".假设John在9:30打开屏幕,然后在9:32保存数据.

然而,玛丽在9点29分打开了完全相同的屏幕和相同的记录.她当时看到约翰在9:30做的相同数据.然后,她更新了记录,并在9:31点击"保存".

保存了哪些数据?约翰或玛丽?

玛丽高兴地继续处理其他记录,当她稍后回来打开记录时,她发现她的变化已经丢失了,她看到了约翰的变化!

请注意,必须明智地使用锁定以防止意外的副作用.例如,假设您的程序在每次打开它时都会锁定记录进行更改.如果John锁定了记录,并且会话屏幕打开以便吃午饭或者他失去联系,会发生什么?锁可以长时间保持在那里,锁定和不可更改,同时禁止其他人改变(甚至查看)该记录.其他考虑因素可能是性能,因为数据库锁定和解锁记录的时间可能会因大量事务而变得明显.

了解锁定对于维护满意的用户和数据完整性至关重要.请查看文档.

  • @ ripper234:这就是为什么我说锁定需要多种考虑才能获得最佳方法.您对所解释的方案是正确的,并且您的建议很好.我不打算也不可能在这里对这个概念进行完整的讨论.目的是提供一个简单,外行的答案. (2认同)