我正在学习MySQL及其工作原理,有一些事情让我感到困惑,但我在网上找不到明确的解释。
行锁和表锁之间的区别是什么?一个锁定行,另一个锁定表,对吗?
那么,在哪种情况下会使用表锁和行锁?这是程序员或数据库管理员可以编程实现的,还是引擎会自动处理?
如果您认为还有其他需要知道的信息,请随意在回答中添加。
非常抱歉可能提出了一个新手问题,但我还在学习。
我正在学习MySQL及其工作原理,有一些事情让我感到困惑,但我在网上找不到明确的解释。
行锁和表锁之间的区别是什么?一个锁定行,另一个锁定表,对吗?
那么,在哪种情况下会使用表锁和行锁?这是程序员或数据库管理员可以编程实现的,还是引擎会自动处理?
如果您认为还有其他需要知道的信息,请随意在回答中添加。
非常抱歉可能提出了一个新手问题,但我还在学习。
虽然这是SQL服务器,但它同样适用于mySQL:什么是行锁、页锁和表锁?何时获取它们?。
通常,在以下情况下,表锁优于行级锁:
现在关键是何时应该使用:这里应用“视情况而定”的策略: 问问您自己,这个事务的使用案例是什么?
通常在需要高粒度控制时,会使用行级锁定。在我看来,这应该作为默认选项。例如,对于订单或订单详情表,其中订单可能会被更新或删除。在高交易量的表上锁定整个表毫无意义。我希望能够让单独的订单用户更新每个订单,并且当我知道其更改范围仅限于特定订单时,不会将其他人锁在外面。
如果我需要出于某种原因从备份中恢复订单和详细信息表,或者基于外部源进行多次更新,则可能锁定整个表以确保所有更新成功完成,并且在让任何人回来之前我可以验证负载。我不想在我进行必要的更新时进行任何更改。但我们必须考虑锁定整个表是否会对用户体验产生负面影响;或者我们是否有其他可用选项。在表级别上进行锁定将阻止其他用户更改任何值。 这真的是我们想要的吗?