表锁和行锁之间的区别

时间:2018-05-21 12:26:45

标签: mysql table-locking rowlocking

我正在研究MySQL以及它是如何工作的,有些东西让我感到困惑,我在网上找不到任何明确的解释。

行锁和表锁之间究竟有什么区别?一个锁定行,另一个锁定表。正确?

那么,在哪种情况下你会使用表锁和行锁?这是程序员或数据库管理员可以编程的东西,还是为你做这件事的enigne?

如果您认为有任何其他信息可以提供,请随时将其添加到您的答案中。 我很抱歉这可能是一个愚蠢的问题,但我还在学习。

1 个答案:

答案 0 :(得分:0)

虽然这是SQL服务器,但它也适用于mySQL:What are row, page and table locks? And when they are acquired?

MySQL docs shows this

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

  • 该表的大多数陈述都是读数。
  • 表的语句是读写的混合,其中写入是单行的更新或删除,可以通过读取一个键来获取:
  • SELECT结合并发INSERT语句,以及极少数UPDATE或DELETE语句。
  • 整个表上的许多扫描或GROUP BY操作,没有任何编写者。

现在何时使用:臭名昭着的"它取决于"适用于: 问问自己此次交易的用例是什么?

通常在需要高粒度控制时使用行级锁定。在我看来,这应该用作默认值。说出可以更新或删除订单的订单或订单明细表。将整个表锁定在高事务量表上是没有意义的。我希望个别订单的用户能够更新每个订单,并且当我知道他们的更改范围仅限于特定订单时,不会将其他人锁定。

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