MySQL的锁机制主要用于管理并发事务对数据的一致性和完整性的访问控制,主要分为以下几种类型:
1.行级锁
- 行级锁是MySQL中锁定粒度最细的锁,只针对当前操作的行进行加锁。
- 优点在于开销小、并发性能高,适用于InnoDB存储引擎。
- InnoDB支持两种行级锁:共享锁(S锁,也叫读锁),多个事务可以同时获得同一数据行的共享锁;排他锁(X锁,也叫写锁),一个事务对某一行加上了排他锁后,其他事务不能再对该行加任何类型的锁。
2.表级锁
- 表级锁是对整个数据表进行加锁,MyISAM存储引擎默认使用的就是表级锁。
- 表级锁的开销小,加锁快,但锁定粒度大,发生锁冲突的概率相对较大,并发性能较差。
- 包括读锁(共享锁)和写锁(排他锁),在MyISAM中,一个表只能有一个写锁,但可以有多个读锁。
3.乐观锁与悲观锁
在 MySQL 中,乐观锁和悲观锁是两种处理并发访问的不同策略。
乐观锁(Optimistic Locking):
乐观锁假设在大多数情况下,数据不会发生冲突,因此在读取数据时不会加锁。当要更新数据时,它会检查在读取数据后是否有其他事务对数据进行了修改。通常,乐观锁会使用版本号或时间戳等机制来检查数据是否被修改。
悲观锁(Pessimistic Locking)</