MySql InnoDB的行锁和表锁

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;

 

 

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

此站点使用Akismet来减少垃圾评论。了解我们如何处理您的评论数据