MySQL 全局锁、表级锁、行级锁

MySQL 中的锁机制主要是为了控制并发访问时的数据一致性,保证数据的正确性和完整性。在 MySQL 中有三种锁类型:全局锁、表级锁和行级锁。

全局锁

全局锁是对整个 MySQL 数据库实例加锁,只有获取全局锁的线程才能对数据库进行修改操作,其他线程都被阻塞。全局锁一般用于备份操作,例如使用 mysqldump 工具对整个数据库进行备份。在备份期间,需要保证数据库不会有任何修改操作,所以可以使用全局锁来实现。.

表级锁

表级锁是对 MySQL 表加锁,只有获取锁的线程才能对表进行修改操作,其他线程对同一表的修改操作都被阻塞。表级锁可以分为两种类型:共享锁和排它锁。

共享锁(Shared Lock):多个线程可以同时获取同一表的共享锁,获取共享锁的线程只能读取表数据,不能对表进行修改操作。当一个线程获取了共享锁时,其他线程只能获取共享锁,不能获取排它锁。

排它锁(Exclusive Lock):只有一个线程可以获取到同一表的排它锁,获取排它锁的线程可以对表进行修改操作。当一个线程获取了排它锁时,其他线程不能获取共享锁或排它锁。表级锁一般用于针对单个表进行修改操作,例如 ALTER TABLE、UPDATE、DELETE 等。

行级锁

行级锁是对 MySQL 表的每一行数据进行加锁,只有获取锁的线程才能对行进行修改操作,其他线程对同一行的修改操作都被阻塞。行级锁可以分为两种类型:共享锁和排它锁。

共享锁(Shared Lock):多个线程可以同时获取同一行的共享锁,获取共享锁的线程只能读取行数据,不能对行进行修改操作。当一个线程获取了共享锁时,其他线程只能获取共享锁,不能获取排它锁。

排它锁(Exclusive Lock):只有一个线程可以获取到同一行的排它锁,获取排它锁的线程可以对行进行修改操作。当一个线程获取了排它锁时,其他线程不能获取共享锁或排它锁。

行级锁一般用于针对单个行数据进行修改操作,例如 UPDATE、DELETE 等。