
mysql数据库中表锁和行锁的主要区别体现在锁定的粒度、并发性能以及使用场景上。不同的存储引擎支持的锁机制也不同,比如InnoDB支持行锁,而MyISAM只支持表锁。
锁定粒度不同
表锁:锁定整个表。当一个线程对某张表进行写操作时,会持有该表的写锁,其他线程无法读或写这张表,直到锁被释放。
行锁:只锁定表中的特定行。多个事务可以同时操作同一张表的不同行,互不干扰,提高了并发性。
并发性能差异大
由于行锁的粒度更小,它允许多个事务同时修改不同行的数据,因此在高并发环境下表现更好。
 表锁因为锁住了整张表,在写操作频繁的场景下容易造成阻塞,降低并发效率。
– 表锁适合以读为主、写操作较少的场景,如日志统计表。 – 行锁更适合需要频繁更新、并发要求高的业务系统,如订单、库存等。
加锁开销与死锁风险
表锁实现简单,加锁快,不会出现死锁(因为一次性锁定整张表)。
 行锁管理更复杂,加锁慢,占用内存更多,且在多个事务交叉等待对方持有的锁时,可能发生死锁,InnoDB会自动检测并回滚某个事务来解决。
适用存储引擎不同
MyISAM和MEMORY引擎仅支持表锁,不支持行级并发控制。
 InnoDB引擎支持行锁(在索引条件下),同时也支持表锁(如没有合适索引时可能退化为表锁)。
基本上就这些。选择哪种锁机制主要取决于你的业务需求和使用的存储引擎。理解它们的区别有助于优化数据库性能和避免不必要的锁争用。


