Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/security/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 数据库:是否有供应商支持列级锁定?_Database_Locking - Fatal编程技术网

Database 数据库:是否有供应商支持列级锁定?

Database 数据库:是否有供应商支持列级锁定?,database,locking,Database,Locking,我正在研究数据库机制,发现有两种机制:表级锁定和行级锁定。我看不到列级锁定,当我在谷歌上搜索时,除了以下链接,我看不到任何关于此的文档:。在此链接中: 列级锁只意味着给定行中的某些列 给定的表被锁定。这种形式的锁定并不常用 因为它需要大量资源来启用和释放锁 这个级别。此外,对列级别的支持也很少 锁定大多数数据库供应商 那么,哪些供应商支持列级锁定?您能告诉我更多细节吗,为什么列级锁定比行级锁定需要大量资源 谢谢:)锁本身不需要任何东西。它是一个作用于抽象名词的抽象动词。为什么锁定一个列要比锁定一

我正在研究数据库机制,发现有两种机制:
表级锁定
行级锁定
。我看不到
列级锁定
,当我在谷歌上搜索时,除了以下链接,我看不到任何关于此的文档:。在此链接中:

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

那么,哪些供应商支持列级锁定?您能告诉我更多细节吗,为什么
列级锁定
行级锁定
需要大量资源


谢谢:)

锁本身不需要任何东西。它是一个作用于抽象名词的抽象动词。为什么锁定一个列要比锁定一个字节、一个文件或一扇门花费更多?所以我不会在你的链接里放很多股票

您的问题的答案在于锁为什么存在——它们保护什么——以及DBMS是如何设计的

DBMS的主要任务之一是管理并发性:尽可能地给每个用户一种错觉,即所有数据始终属于每个用户。不同的方正在更改数据库,DBMS确保这些更改在所有用户看来都是一个事务,这意味着没有人看到“部分更改”,也没有人的更改会“影响”另一方的更改。你和我都可以改变同样的事情,但不能同时改变:数据库管理系统确保我们中的一个先做,然后再显示那是谁。DBMS使用锁在数据被更改时保护数据,或者在查看数据时防止数据被更改

请注意,当我们“想要更改相同的内容”时,内容是一行(或多行)。行代表现实世界中的事物,我们正在计算和跟踪的事物。列是这些东西的属性

大多数DBMS都是围绕数据行进行内部组织的。数据逐行存储在内存页和磁盘块中。这些系统中的锁保护内存中面向行的数据结构。锁定单个行的代价很高;有很多行。作为权宜之计,许多系统锁定行(页)集或整个表。爱好者们精心设计了“锁升级”来控制锁的数量

有些数据库管理系统是围绕列组织的。这是一种设计选择;因为一行出现在多个物理位置(1/column),而不是整齐地嵌套在其他行之间,这使得插入更昂贵。但折衷是,就I/O而言,单个列的摘要更便宜。在这样的系统中,可能存在“列锁”,没有理由认为它们会特别昂贵。但是,请注意,对于插入,它们会以与表锁完全相同的方式影响并发性:不能将行插入到列被锁定的表中。(也有办法解决这个问题。DBMS很复杂,这是有道理的。)

因此,您的问题的答案是,大多数DBMS没有“列”作为锁可以保护的内部结构。在这样做的情况下,列锁将是一个特殊项,它允许一定程度的列并发,而在其他方面基本上是表锁