繁体   English   中英

锁定数据库

[英]Locking the database

嗨,我正在尝试查看锁定数据库的内容,并发现了两种锁定类型。 乐观和悲观的锁定。 我在Wiki上找到了一些文章,但我想了解更多! 有人可以向我解释这些锁定吗? 我们只应在需要独占访问权限时才使用锁定吗? 锁定仅在我们使用事务时发生吗? 提前致谢。

凯文

乐观锁根本就没有锁。

它的工作原理是:在开始进行更改之前,先注意系统所处的状态,然后继续进行这些更改,并假设(乐观地)假设没有其他人愿意进行相冲突的更新。 正如您将要自动提交这些更改一样,您将检查与此同时其他人是否也更新了相同的数据。 在这种情况下,您的提交将失败。

例如使用乐观锁定进行颠覆。 当您尝试提交时,必须处理所有冲突,但是在此之前,您可以根据需要对工作副本进行处理。

悲观锁与真实锁一起使用。 假设存在争用,您可以在触摸之前锁定要更新的所有内容。 其他所有人都必须等待您提交或回滚。

当使用具有事务支持的关系数据库时,数据库通常会在内部进行锁定(例如,当您发出UPDATE语句时),因此对于常规的联机处理,您无需自己进行处理。 仅当您要进行维护工作或进行大批量生产时,才有时需要锁定表。

我们只应在需要独占访问权限时才使用锁定吗?

您需要它来防止其他会话的操作冲突。 通常,这意味着更新。 读取数据通常可以同时进行。

锁定仅在我们使用事务时发生吗?

是。 在进行交易时,您将积累锁,并在锁结束时释放所有锁。 请注意,处于自动提交模式的单个SQL命令本身仍然是事务。

事务隔离级别还指定锁定行为。 BOL是指:事务隔离级别控制:

读取数据时是否获取锁,以及请求什么类型的锁。

读取锁的保持时间。

读取操作是否引用了另一个事务修改的行:

阻塞,直到释放该行上的排他锁。

检索语句或事务开始时存在的行的提交版本。

读取未提交的数据修改。

默认级别为:未提交读取(最低级别,仅隔离事务以确保不读取物理损坏的数据)

读取已提交(数据库引擎默认级别)

可重复读

可序列化(最高级别,其中事务完全相互隔离)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM