mysql中select会锁表吗?正确答案是会锁表,有些情况是表锁,有些情况是行锁。
有的认为mysql的 select 会锁表 ,有的认为 mysql 的查询不会锁表 。
其实这2种观点都有些片面。
锁表跟存储引擎INNODB 和MYISAM关系很大。
对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。
对于innodb的表select 有些情况是表锁,有些情况是行锁。
由于InnoDB预设的是Row-Level Lock,只有明确指定主键的时候MySql才会执行Row lock,否则MySql将会执行Table Lock.
1、明确指定主键则是行锁
2、明确指定主键,若无数据则无锁
3、无主键,table lock
4、主键不明确,table lock
注:MyAsim只支持表级锁,InnerDB支持行级锁,添加了(行级锁/表级锁)锁的数据不能被其他事务再锁定。也不能被其他事务修改。