封锁是一项用于多用户同时访问数据库的技术,是实现并发控制的一项重要手段,能够防止当多用户改写数据库时造成数据不一致与冲突。当有一个用户对数据库内的数据进行操作时,在读取数据前先锁住数据,这样其他用户就无法访问和修改该数据,直到这一数据修改并写回数据库解除封锁为止。詹姆斯·尼古拉·格雷最早完整描述了数据库锁。

按照粒度可分为:

  • 表锁(文件锁
  • 页锁(page-level lock)
  • 记录锁(行锁,因为SQL标准使用“行”的表述)

按照使用方式分为:

  • 互斥锁(exclusive lock,写锁)
  • 共享锁(sharing lock,读锁)

一般说来,获得锁并不是禁止其他事务对加锁的数据的读/写,而是阻塞了其他事务对这些数据的加锁操作。例如,如果一般的select语句根本不申请加锁,所以能直接读取其他事务已经加了共享锁的数据。

参考

  • 王珊 萨师煊. 数据库系统概论 (M) 4. 北京: 高等教育版社. 2006. ISBN 7-04-019583-6.

Wikiwand in your browser!

Seamless Wikipedia browsing. On steroids.

Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.

Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.