您好,我正在尝试查看是什么锁定了数据库,并发现了两种类型的锁定。乐观锁定和悲观锁定。我在 Wiki 上找到了一些文章,但我想了解更多!有人可以向我解释一下这些锁定吗?我们应该只在需要独占访问某些东西时才使用锁定吗?只有当我们使用事务时才会发生锁定? 提前致谢。
凯文
最佳答案
乐观锁定根本就不是锁定。
它的工作原理是在您开始进行更改之前记录系统所处的状态,然后继续进行这些更改,假设(乐观地)没有其他人愿意进行冲突的更新。正如您即将自动提交这些更改一样,您将检查其他人是否同时更新了相同的数据。在这种情况下,您的提交会失败。
Subversion 例如使用乐观锁定。当您尝试提交时,您必须处理任何冲突,但在此之前,您可以在工作副本上执行任何您想要的操作。
悲观锁与真实锁一起使用。假设会出现争用,您可以在接触之前锁定要更新的所有内容。其他人都必须等待您提交或回滚。
当使用支持事务的关系数据库时,数据库通常会在内部处理锁定(例如当您发出 UPDATE 语句时),因此对于正常的在线处理,您不需要自己处理这个问题。仅当您想要进行维护工作或大批量工作时,您有时才需要锁定表。
We should only use locking when we need exclusive access to something?
您需要它来防止其他 session 的操作冲突。一般来说,这意味着更新。读取数据通常可以并发进行。
Locking only happens when we use transaction?
是的。您将在进行交易时积累锁,并在交易结束时释放所有锁。请注意,自动提交模式下的单个 SQL 命令本身仍然是一个事务。
关于sql - 锁定数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5255159/