mysql 第8.11章 事务-表锁和行锁机制 mysql 第8.11章 事务-表锁和行锁机制

1小时前

在 MySQL 中,表锁和行锁是两种主要的锁机制,用于处理多用户并发访问数据库时的竞争条件。它们各自有不同的应用场景和特性。

一、表锁

(Table Locks)

概念:

  • 表锁是指对整个表加锁,这样在锁定期间其他线程(或事务)不能对该表进行任何操作,包括读取和写入。

特性:

  • 粒度大:锁住整个表,这意味着锁的粒度较大,可能会导致较大的锁竞争。

  • 开销低:表锁的开销较低,因为它不需要记录和管理行级的锁信息。

  • 锁的范围广:由于锁住了整个表,所以在锁定期间其他事务无法对表中的任何行进行操作。

  • 适用场景:表锁通常适用于读写操作较少、并发要求较低的场景。适用于需要确保整个表一致性的操作,例如批量更新或删除操作。


锁类型:

  • 读锁(共享锁):允许其他事务读取表,但不允许写入。多个读锁可以同时存在。

  • 写锁(排他锁):不允许其他事务读取或写入表。写锁会阻塞所有其他的读锁和写锁。

二、行锁

(Row Locks)

概念:

  • 行锁是指对表中的特定行加锁,这样在锁定期间其他线程(或事务)只能对这些特定的行进行操作,而不会影响其他行。

特性:

  • 粒度小:锁的粒度较小,只锁定需要操作的行,从而提高了并发性和性能。

  • 开销高:管理行锁的开销较大,因为需要记录和管理每个被锁定的行。

  • 锁的范围小:由于只锁定了特定的行,其他行可以被并发访问,从而减少了锁竞争。

  • 适用场景:行锁适用于高并发的场景,特别是当操作的表中只有部分行需要锁定时。适用于需要高并发的在线事务处理(OLTP)系统。

锁类型:

  • 共享锁(读锁):允许其他事务读取锁定的行,但不允许修改。

  • 排他锁(写锁):不允许其他事务读取或修改锁定的行。

三、锁机制的对比

https://cyfb.lulublog.cn/images/3/2026/04/b0hWLRLzrPaaWUh419z89R995a1HUM.png

四、在 MySQL 中的实现

MyISAM 存储引擎:主要使用表锁。MyISAM 存储引擎锁定整个表进行读写操作,不支持行锁。

InnoDB 存储引擎:支持行锁。InnoDB 存储引擎通过实现行级锁来提高并发性,并且支持事务和多版本并发控制(MVCC)。

选择使用表锁还是行锁取决于应用场景的需求,比如数据的访问模式、并发要求以及对性能的期望。

阅读 3

mysql文章
带到手机上看