贝利信息

什么是行锁和表锁_mysql锁区别说明

日期:2025-12-27 00:00 / 作者:P粉602998670
行锁和表锁的核心区别在于锁定范围:行锁只锁满足条件的行,表锁锁整张表;行锁由InnoDB实现、依赖索引、并发高但可能死锁,表锁开销小、无死锁但并发低;选型应依引擎与场景,InnoDB+行锁适用于高频更新业务,表锁适合批量操作或MyISAM只读系统。

行锁和表锁是 MySQL 中两种基础的并发控制机制,核心区别在于锁定范围不同:行锁只锁住满足条件的某几行数据,表锁则直接锁住整张表。

行锁:细粒度、高并发、依赖索引

行锁由 InnoDB 存储引擎实现,是 MySQL 最小粒度的锁。它只对 SQL 实际访问到的数据行加锁,其他事务仍可操作表中未被锁定的行。

表锁:粗粒度、简单快、适合批量操作

表锁作用于整张表,MyISAM 引擎默认使用表锁,InnoDB 在特定场景下也会用(如显式 LOCK TABLES 或 DDL 操作)。

怎么选?看业务场景和引擎

绝大多数在线业务应优先用 InnoDB + 行锁,尤其订单、库存、账户等高频更新场景。表锁更适合临时批量导入、统计报表生成、或 MyISAM 只读查询为主的系统。

注意:InnoDB 的行锁能力不是“自动生效”的——没有索引的 WHERE 条件、全表扫描、或使用 LIKE '%abc' 等无法命中索引的情况,都会导致锁升级为表锁。