一、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
:可以并发执行,之间并不会相互影响,
没有锁
。