Mysql锁行还是锁表,看这一篇就够了

  • Post author:
  • Post category:mysql



一、MyISAM


说明

:MyISAM不支持行锁

MySQL的表级锁有两种模式:

  • 表共享读锁
  • 表独占写锁

读锁会阻塞写,写锁会阻塞读和写

  • 对MyISAM表的读操作,不会阻塞其它进程对同一表的读请求,但会阻塞对同一表的写请求。只有当读锁释放后,才会执行其它进程的写操作。
  • 对MyISAM表的写操作,会阻塞其它进程对同一表的读和写操作,只有当写锁释放后,才会执行其它进程的读写操作。


缺点

:MyISAM不适合做写为主表的引擎,因为写锁后,其它线程不能做任何操作,大量的更新会使查询很难得到锁,从而造成永远阻塞

1)

select

:对于myisam的表select 是会锁定表的 ,会导致其他操作挂起,处于等待状态。MyISAM在执行查询语句(select)前,会自动给涉及的所有表加

读锁

2)

update,delete,insert

:在执行增删改操作前,会自动给涉及的表加

写锁

二、InnoDB


说明

:InnoDB支持行锁和表锁

1)

select

:对于innodb的表select 是

不会锁

表的。(其实这里使用到了快照)

2)

update,delete

:where中的过滤条件列,

如果有索引且走了索引,锁行;如果没有索引或没有走索引,锁表

。(注意有些索引没有生效也是会锁表的)

3)

insert

:可以并发执行,之间并不会相互影响,

没有锁



版权声明:本文为qq_33865313原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。