我正在研究数据库机制,并发现有两种机制:table level locking
和row level locking
。我没有看到column level locking
,当我谷歌时,除了这个链接外,我看到没有文件说明这一点:database locking。在此链接中:
列级锁定仅表示给定行中的某些列 给定的表被锁定。这种形式的锁定并不常用 因为它需要大量资源来启用和释放锁定 这个级别。此外,对列级别的支持很少 锁定大多数数据库供应商。
那么,哪些供应商支持列级锁定?你能否告诉我更多细节,为什么column level locking
需要大量资源而不是row level locking
。
谢谢:)
答案 0 :(得分:1)
锁本身本身不需要任何东西。它是一个抽象动词,作用于抽象名词。为什么锁定列的成本不仅仅是锁定字节,文件或门?所以我不会在你的链接中放入大量股票。
您的问题的答案在于为什么存在锁定 - 它们保护什么 - 以及如何设计DBMS。
DBMS的主要工作之一是管理并发:尽可能地为每个用户提供所有数据始终属于每个数据的错觉。不同方正在更改数据库,DBMS确保这些更改对所有用户显示为事务,这意味着没有人看到"部分更改",没有人永远改变"踩到"另一个'第你和我都可以改变同样的事情,但不能同时改变:DBMS确保我们中的一个先行,然后可以显示那是谁。 DBMS使用锁来保护数据,同时更改数据,或防止数据在被查看时被更改。
请注意,当我们想要更改相同的内容时, thing 就是一行(或多行)。行代表现实世界中的东西,我们正在计算和跟踪的东西。列是这些东西的属性。
大多数DBMS在内部围绕数据行进行组织。数据在逐行的内存页和磁盘块中。这些系统中的锁保护内存中面向行的数据结构。锁定单个行是昂贵的;有很多行。作为权宜之计,许多系统锁定行(页)或整个表的集合。有些人已经精心准备了锁定升级"控制锁定人口。
围绕列组织了一些DBMS。这是一个设计选择;它使插入更昂贵,因为一行出现在几个物理位置(1 /列),而不是整齐地位于其他行之间。但权衡的是,就I / O而言,各列的摘要更便宜。在这样的系统中,可能存在"列锁定",并且没有理由认为它们特别昂贵。但是,请注意, for insertion 它们会以与表锁完全相同的方式影响并发:您不能将行插入其列被锁定的表中。 (有很多方法可以解决这个问题.DBMS很复杂,有理由。)
因此,您的问题的答案是,大多数DBMS都没有"列"作为锁可以保护的内部结构。在那些做的事情中,列锁将是一个特殊项目,允许一定程度的列式并发,但代价是基本上是一个表锁。