symfony2 原则 2:在什么情况下我们需要锁定数据库 table/row?

symfony2 doctrine 2 : in which cases do we need to lock a database table/row?

我发现了一篇关于锁定的教义文章:http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html?highlight=locking#locking-support

我了解到在某些涉及多个请求的情况下,需要锁定表。

我不清楚我们什么时候需要这样做。有人可以提供我们绝对需要的基本用例吗?或者更精确地定义什么情况下我们需要这样做?

比如用户1访问实体修改页面,用户2在用户1之后访问。如果user1提交了一个更改请求,user2在user1提交之前已经加载了数据,现在在user2更新实体后按下更新按钮,我们是否需要锁定表?

显式锁定数据库 tables/rows 在基于 Web 的应用程序中很少需要,应该避免。在等待请求时切勿锁定任何东西。

考虑一下如果用户 1 签出一个实体,锁定 table/row 然后去吃午饭会发生什么。现在您的数据库可能会被锁定一个小时或更长时间,这让其他用户感到沮丧。午餐后,您的用户 运行 乘公共汽车过来。糟糕。

Doctrine 2 有几种内置的并发方法:http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html#locking-support。仔细阅读并了解哪种方法最适合您的情况。

通常您会希望使用乐观锁定,它假设多个用户同时更新同一条记录是相当罕见的事件。第一个更新的用户获胜。版本控制用于防止后续用户覆盖第一个用户所做的更改。其他用户将不得不重做他们的更改,但这比输入不正确的数据要好。