SQL 面试题 目录

SQL 中什么是锁 (Lock)?

推荐答案

在 SQL 中,锁(Lock)是一种机制,用于控制多个事务对同一数据的并发访问。锁可以防止数据在事务处理过程中被其他事务修改,从而确保数据的一致性和完整性。常见的锁类型包括共享锁(Shared Lock)和排他锁(Exclusive Lock)。

本题详细解读

锁的作用

锁的主要作用是确保在并发环境下,多个事务对同一数据的访问不会导致数据不一致或冲突。通过锁定数据,数据库管理系统(DBMS)可以控制事务的执行顺序,避免脏读、不可重复读和幻读等问题。

锁的类型

  1. 共享锁(Shared Lock)

    • 也称为读锁(Read Lock)。
    • 允许多个事务同时读取同一数据,但不允许任何事务修改该数据。
    • 通常用于 SELECT 查询操作。
  2. 排他锁(Exclusive Lock)

    • 也称为写锁(Write Lock)。
    • 只允许一个事务对数据进行修改,其他事务既不能读取也不能修改该数据。
    • 通常用于 INSERT、UPDATE 和 DELETE 操作。

锁的粒度

锁的粒度指的是锁定的数据范围,常见的锁粒度包括:

  • 行级锁(Row-Level Lock):锁定单行数据,粒度最小,并发性最高。
  • 页级锁(Page-Level Lock):锁定一页数据,粒度中等。
  • 表级锁(Table-Level Lock):锁定整个表,粒度最大,并发性最低。

锁的兼容性

  • 共享锁与共享锁是兼容的,多个事务可以同时持有共享锁。
  • 共享锁与排他锁是不兼容的,一个事务持有共享锁时,其他事务不能持有排他锁。
  • 排他锁与排他锁是不兼容的,一个事务持有排他锁时,其他事务不能持有任何类型的锁。

锁的释放

锁通常在事务结束时释放,事务可以通过 COMMIT 或 ROLLBACK 来结束。在某些情况下,锁也可能在事务执行过程中释放,具体取决于数据库的隔离级别和锁的管理策略。

死锁

死锁是指两个或多个事务相互等待对方释放锁,导致所有事务都无法继续执行的情况。数据库管理系统通常会有死锁检测和恢复机制,通过回滚其中一个事务来解除死锁。

锁的使用场景

  • 高并发环境:在高并发环境下,锁的使用尤为重要,可以有效避免数据冲突和不一致。
  • 事务处理:在事务处理过程中,锁可以确保事务的原子性和一致性。

通过合理使用锁,可以确保数据库在并发环境下的数据一致性和完整性,同时提高系统的并发性能。

纠错
反馈