> For the complete documentation index, see [llms.txt](https://bohans.gitbook.io/ji-chu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://bohans.gitbook.io/ji-chu/mysql/qi-ta/mysql-suo-de-lei-xing.md).

# 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 实现。
    * 乐观锁则通过版本号实现。
