数据库:有哪些供应商支持列级锁定?

4
我正在学习数据库机制,发现有两种机制:表级锁定行级锁定。我没有看到列级锁定,当我搜索时,除了这个链接:database locking,没有其他文档提到它。在这个链接中:

列级锁定仅意味着锁定给定表中给定行内的某些列。这种形式的锁定不常用,因为启用和释放此级别的锁定需要大量资源。此外,大多数数据库供应商都很少支持列级锁定。

那么,哪些供应商支持列级锁定?您可以告诉我更多详细信息,为什么列级锁定行级锁定需要更多资源。
谢谢 :)
1个回答

3
一个锁本身不会要求任何东西。它是作用于抽象名词的抽象动词。为什么锁定一个列需要比锁定一个字节、一个文件或一扇门更昂贵呢?因此,我不会在您提供的链接中投入太多信任。
回答您的问题在于锁存在的原因——它们保护什么以及DBMS的工程设计方式。
DBMS 的主要工作之一是管理并发:尽可能地让每个用户感觉所有数据都属于他们,所有时间都可用。不同的方面正在改变数据库,而 DBMS 则确保这些更改对所有用户都显示为“事务”,这意味着没有人看到“部分更改”,也没有人的更改会“覆盖”另一个人的更改。您和我都可以更改相同的内容,但不能同时更改:DBMS 确保我们中的一个人先行动,并且稍后可以显示是谁先行动的。DBMS 使用锁来保护正在被更改的数据,或者防止它们在被查看时被更改。
请注意,当我们“希望更改相同的内容”时,“内容”是一行(或行)。行代表真实世界中的事物,我们正在计数和跟踪这些事物。列是这些事物的属性。
大多数 DBMS 在内部都是围绕数据行进行组织的。这些数据以内存页面和磁盘块为单位,逐行排列。这些系统中的锁保护面向行的数据结构在内存中。锁定单个行代价很大;有很多行。因此,许多系统锁定行集(页面)或整个表作为一种便捷措施。更高级的系统具有复杂的“锁升级”,以控制锁的数量。
有一些 DBMS 是围绕列来组织的。这是一个设计选择;它使插入变得更加昂贵,因为行出现在几个物理位置上(1/列),而不是整齐地嵌套在其他行之间。但权衡是个别列的总结在 I/O 方面更便宜。在这样的系统中,可能存在“列锁”,并且没有理由认为它们会特别昂贵。然而,请注意,对于插入,它们会以完全相同的方式影响并发性,就像表锁一样:您不能将行插入被锁定列的表中。 (也有应对这种情况的方法。DBMS 是复杂的,有理有据。)
因此,您的问题的答案是,大多数 DBMS 没有“列”作为内部结构,可以通过锁来保护。在那些有的 DBMS 中,列锁将是一种专门的物品,可允许一定程度的列并发,代价是基本上成为表锁。

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