表锁和行锁的区别

4

我正在学习MySQL及其工作原理,有一些事情让我感到困惑,但我在网上找不到明确的解释。

行锁和表锁之间的区别是什么?一个锁定行,另一个锁定表,对吗?

那么,在哪种情况下会使用表锁和行锁?这是程序员或数据库管理员可以编程实现的,还是引擎会自动处理?

如果您认为还有其他需要知道的信息,请随意在回答中添加。

非常抱歉可能提出了一个新手问题,但我还在学习。

1个回答

0

虽然这是SQL服务器,但它同样适用于mySQL:什么是行锁、页锁和表锁?何时获取它们?

MySQL文档显示如下:

通常,在以下情况下,表锁优于行级锁:

  • 对于表的大多数语句都是读取操作。
  • 对于表的语句是读取和写入操作的混合,其中写入操作是针对一个可以通过一次键读取来获取的单个行的更新或删除操作:
  • SELECT与并发INSERT语句结合使用,并且很少使用UPDATE或DELETE语句。
  • 在没有任何写入操作的情况下,整个表格上进行许多扫描或GROUP BY操作。

现在关键是何时应该使用:这里应用“视情况而定”的策略: 问问您自己,这个事务的使用案例是什么?

通常在需要高粒度控制时,会使用行级锁定。在我看来,这应该作为默认选项。例如,对于订单或订单详情表,其中订单可能会被更新或删除。在高交易量的表上锁定整个表毫无意义。我希望能够让单独的订单用户更新每个订单,并且当我知道其更改范围仅限于特定订单时,不会将其他人锁在外面。

如果我需要出于某种原因从备份中恢复订单和详细信息表,或者基于外部源进行多次更新,则可能锁定整个表以确保所有更新成功完成,并且在让任何人回来之前我可以验证负载。我不想在我进行必要的更新时进行任何更改。但我们必须考虑锁定整个表是否会对用户体验产生负面影响;或者我们是否有其他可用选项。在表级别上进行锁定将阻止其他用户更改任何值。 这真的是我们想要的吗?


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接