我了解乐观锁定和悲观锁定之间的区别。现在有人可以向我解释我什么时候会使用其中任何一个吗?
这个问题的答案是否会根据我是否使用存储过程来执行查询而改变?
但只是为了检查,乐观的意思是“阅读时不要锁定表格”,悲观的意思是“阅读时锁定表格”。
乐观锁定是一种读取记录的策略,记下版本号(执行此操作的其他方法涉及日期、时间戳或校验和/哈希)并在写回记录之前检查版本是否未更改。当您写回记录时,您会过滤版本上的更新以确保它是原子的。(即在您检查版本并将记录写入磁盘之间尚未更新)并一键更新版本。
如果记录是脏的(即与您的不同版本),您将中止事务并且用户可以重新启动它。
此策略最适用于大容量系统和三层架构,您不必为会话维护与数据库的连接。在这种情况下,客户端实际上无法维护数据库锁,因为连接是从池中获取的,并且您可能没有使用从一次访问到下一次访问的相同连接。
悲观锁定是指您锁定记录以供您独占使用,直到您完成它为止。它比乐观锁定具有更好的完整性,但需要您小心设计应用程序以避免死锁。要使用悲观锁定,您需要直接连接到数据库(通常在两层客户端服务器应用程序中就是这种情况)或可以独立于连接使用的外部可用事务 ID。
在后一种情况下,您使用 TxID 打开事务,然后使用该 ID 重新连接。DBMS 维护锁并允许您通过 TxID 选择会话备份。这就是使用两阶段提交协议(例如XA或COM+ 事务)的分布式事务的工作方式。