今天在开发测试时候出现了锁表,原因是因为我在本地开启了事务,代码中打了断点,然后测试同学测试时候出现了锁表,我去排查了问题,然后找到相关的资料了解下,
总结:原因的表没有加索引,所以走了全表扫描,这时候开启了事务,没有commit。这时候另一个人想写表,发现表被锁了,然后测试同学说mysql是行锁,mysql确实支持行锁,但是前提条件是要走索引,不然就锁表
一、前言
对于行锁和表锁的含义区别,在面试中应该是高频出现的,我们应该对MySQL中的锁有一个系统的认识,更详细的需要自行查阅资料,本篇为概括性的总结回答。
MySQL常用引擎有MyISAM和InnoDB,而InnoDB是mysql默认的引擎。MyISAM不支持行锁,而InnoDB支持行锁和表锁。
如何加锁?
MyISAM在执行查询语句(SELECT)前,会自动给涉及的所有表加读锁,在执行更新操作(UPDATE、DELETE、INSERT等)前,会自动给涉及的表加写锁,这个过程并不需要用户干预,因此用户一般不需要直接用LOCK TABLE命令给MyISAM表显式加锁。
显式加锁:
上共享锁(读锁)的写法:lock in share mode
,例如:
select math from zje where math>60 lock in share mode;
上排它锁&