MySql InnoDB的行锁和表锁
MySql InnoDB的行锁和表锁
首先如果使用锁,必须在事务内上锁“for update”!!
如果上了锁,那么在并发很高的情况下,必须要这个带锁的事务执行commit之后才会允许其他的事务执行。
InnoDB默认是使用行锁的,但是条件是要有指定的明确的主键,才会用行锁,否则都是表锁,InnoDB引擎的数据表请尽量不要使用表锁。
假设我们有一张表,有users表,表两个字段,id,name,并且id为主键。
这样会使用行锁:
select * from users where id=10;
下面的都是表锁
select * from users where id>1 for update; select * from users where name='tom' for update; select * from users where id != 3 for update; select * from users where name like '%tom%' for update;
如果查无此数据则不上锁
select * from users where id='-100' for update;