表锁、行锁区别 Published on Apr 16, 2026 in 随笔 with 0 comment 核心区别对比表 维度 表锁 行锁 锁定粒度 粗粒度(整张表) 细粒度(表中的一行或几行) 资源开销 小(数据库只需维护一个锁) 大(需要为每一行维护锁信息,占用更多内存和CPU) 并发性能 低(同一时间只允许一个事务修改表,读/写相互阻塞严重) 高(多个事务可以同时修改同一张表的不同行,互不干扰) 死锁概率 低(事务简单,不易产生循环等待) 高(事务复杂,多个事务互相等待对方释放行锁时容易发生) 典型场景 大量读、少量写,或批量修改全表数据(如报表、数据仓库) 高并发、频繁增删改查的业务系统(如电商订单、银行交易) 数据库引擎 MyISAM、Memory 等(默认使用) InnoDB、NDB 等(默认使用) 详细解释 1. 表锁 (Table Lock) 工作方式:锁定整张表。当有事务对表进行写操作时,其他事务的读和写都会被阻塞;即使是读操作,也可能阻塞写操作(取决于锁类型)。 优点:开销小,加锁快,不会出现死锁。 缺点:并发能力非常差。只要有一个事务在修改表,其他事务就只能排队等待。 适用:对并发要求不高、主要是批量读取(如生成报表)、或者执行DDL(修改表结构)操作时。 2. 行锁 (Row Lock) 工作方式:只锁定需要修改的那一行数据。其他事务可以自由访问表中的其他行,甚至可以对同一行的不同列进行某些操作(取决于隔离级别)。 优点:并发性能极佳,能最大程度地支持多事务同时读写。 缺点:开销大,加锁慢,并且由于锁的持有和释放时机复杂,容易产生死锁。 适用:几乎所有高并发、需要频繁更新少量数据的在线事务处理系统。 一个重要的例外:行锁升级 需要注意的是,行锁在某些情况下会自动升级为表锁,导致性能骤降。常见原因有: 查询没有使用索引:当你要更新一行数据,但WHERE条件里的字段没有索引时,数据库不知道要锁哪一行,于是只能锁住整张表来确保安全。 锁的数量太多:当单次操作影响的行数非常多(比如更新了表中30%以上的数据),数据库引擎可能认为维护大量行锁的开销已大于直接使用表锁,便会主动升级。 本文由 admin 创作,采用 知识共享署名4.0 国际许可协议进行许可。本站文章除注明转载/出处外,均为本站原创或翻译,转载前请务必署名。