2022-6月更文挑战29-数据库锁相关知识

94 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第29天,点击查看活动详情

数据库锁相关知识

前文

数据库在查询、写入等操作的过程中,由于存在并发情况下的数据处理问题,因此同样是存在锁相关的操作。本文会根据不同的分类方式对数据库锁相关的信息进行整理。文章内容主要是笔记性质的记录,可能存在不准确或错误之处。

锁的分类

根据不同的分类方式,数据库锁可以分为不同的类别。下面将根据不同的分类方式,对数据库的锁进行讨论。

根据锁的锁定范围

  • 行锁:主要锁定数据库的某一行数据,行锁的效率明显比较高。
  • 表锁:主要锁定某一张数据库表的数据,表锁相比于行锁由于锁定的范围较高会导致效率的降低。
  • 页锁:指的是数据库的某一页的存储内容,也就是数据库表中相邻的一些数据的锁定。

根据锁的并发生效限制

  • 共享锁:可以认为是读锁。当进行共享锁的锁定时,不同的数据库操作可以并发进行,但只能进行并发的读取。在发生共享锁时,所有的操作线程都不可以进行数据库数据的写入。共享锁也可以称为是读锁。select ... lock in share mode
  • 排他锁:可以认为是写锁。对比共享锁,很明显该锁就是一个重量级锁。当进行锁定时,数据库表不能被其他线程进行读取和写入的操作。同一时刻只有一个线程能够获取到排他锁,可以成为写锁。select ... for update

根据锁的数据变更思想

  • 乐观锁:默认认为数据不会发生变化,仅仅在数据进行提交时,会进行数据的比较。可以认为乐观锁是cas的方式,自然有比较高的效率。
  • 悲观锁:乐观锁主要是认为数据会被其他线程更新,也就是需要对数据进行完全的锁定。显然,上面提到过的排他锁就是一种悲观锁,保证数据不能被其他线程处理。

后记

  • 千古兴亡多少事?悠悠。不尽长江滚滚流。