MySQL 锁的类型

  • 共享锁和排他锁

    • 读锁是共享的。

      • 加锁:SELECT * FROM table WHERE id=1 LOCK IN SHARE MODE

      • 释锁:COMMIT/ROLLBACK

    • 写锁是排他的。

      • DELETE/ UPDATE/ INSERT -- 加锁

      • SELECT * FROM table WHERE ... FOR UPDATE -- 加锁

      • COMMIT/ROLLBACK -- 释锁

      • ALTER TABLE

  • 表锁和行锁

    • 表锁会锁定整张表并且阻塞其他用户对该表的所有读写操作,比如 alter 修改表结构的时候会锁表。

    • 行锁又可以分为乐观锁和悲观锁:

      • 悲观锁可以通过 for update 实现。

      • 乐观锁则通过版本号实现。

最后更新于