我发现了一篇关于锁定的学说文章:http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html?highlight=locking#locking-support
据我所知,在涉及多个请求的某些情况下,需要锁定表。
我不清楚我们何时需要这样做。有人可以提供我们绝对需要的基本用例吗?或者更准确地定义我们需要这样做的情况?
例如,假设用户1访问实体修改页面,用户2在user1之后访问它。如果user1提交了更改请求,并且user2提交之前已经加载数据的user2现在在user2更新实体后按下更新按钮,我们是否需要锁定表?
答案 0 :(得分:2)
在基于Web的应用程序中很少需要显式锁定数据库表/行,应该避免使用。在等待请求时永远不要锁定某些东西。
考虑如果用户1签出实体,锁定表/行然后去吃午餐会发生什么。现在,您的数据库可能会被锁定一个小时或更多令其他用户感到沮丧。午餐后,您的用户会被公共汽车撞倒。 Oopsy。
Doctrine 2有几种内置的并发方法:http://doctrine-orm.readthedocs.org/en/latest/reference/transactions-and-concurrency.html#locking-support。仔细阅读并了解哪种方法最适合您的情况。
通常,您会希望使用乐观锁定,假设多个用户同时更新同一记录是一种相当罕见的事件。第一个更新的用户获胜。版本控制用于防止后续用户覆盖第一个用户所做的更改。其他用户将不得不重做他们的更改,但这比输入不正确的数据更好。