面试题:MySQL 中有哪些锁类型?

在 MySQL 中,锁机制用于管理并发操作,确保数据的一致性和完整性。常见的锁类型包括:

1. 全局锁

  • FLUSH TABLES WITH READ LOCK (FTWRL):锁定整个数据库实例,禁止写操作,通常用于备份。
  • 全局读锁:允许所有会话读数据,但禁止写操作。

2. 表级锁

  • 表锁
    • 表共享锁 (Table Read Lock):允许多个会话同时读,但禁止写。
    • 表独占锁 (Table Write Lock):禁止其他会话读写。
  • 元数据锁 (MDL):防止表结构被修改,通常在执行 DDL 语句时自动加锁。

3. 行级锁

  • 共享锁 (S Lock):允许多个事务同时读同一行,但禁止写。
  • 排他锁 (X Lock):禁止其他事务读写该行。
  • 记录锁 (Record Lock):锁定索引记录。
  • 间隙锁 (Gap Lock):锁定索引记录之间的间隙,防止插入。
  • 临键锁 (Next-Key Lock):结合记录锁和间隙锁,锁定记录及其前后间隙。

4. 意向锁

  • 意向共享锁 (IS Lock):表示事务打算在表中的某些行上加共享锁。
  • 意向排他锁 (IX Lock):表示事务打算在表中的某些行上加排他锁。

5. 自增锁 (AUTO-INC Lock)

  • 用于自增列,确保插入操作时自增值的唯一性。

6. 死锁

  • 当多个事务相互等待对方释放锁时,形成死锁。MySQL 会自动检测并终止其中一个事务。

7. 乐观锁与悲观锁

  • 乐观锁:假设冲突少,通常在提交时检查版本号或时间戳。
  • 悲观锁:假设冲突多,操作前先加锁。

8. 死锁检测与处理

  • MySQL 会自动检测死锁并终止其中一个事务。

9. 锁的粒度

  • 行锁:锁定单行,并发度高。
  • 页锁:锁定数据页,介于行锁和表锁之间。
  • 表锁:锁定整个表,并发度低。

10. 锁的兼容性

  • 共享锁与共享锁兼容,共享锁与排他锁不兼容,排他锁与排他锁不兼容。

11. 锁的释放

  • 事务提交或回滚时释放锁。

12. 锁的等待与超时

  • 事务等待锁时可能超时,超时后返回错误。

13. 锁的监控

  • 使用 SHOW ENGINE INNODB STATUS 或 information_schema.INNODB_LOCKS 监控锁状态。

14. 锁的优化

  • 通过合理设计索引、减少事务大小、使用低隔离级别等方式优化锁的使用。

15. 锁的隔离级别

  • 读未提交 (Read Uncommitted):最低级别,可能读到未提交数据。
  • 读已提交 (Read Committed):只能读到已提交数据。
  • 可重复读 (Repeatable Read):确保事务内多次读取结果一致。
  • 串行化 (Serializable):最高级别,完全串行执行。

这些锁类型帮助 MySQL 在不同场景下管理并发操作,确保数据一致性。

THE END
点赞9 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容