MyISAM
MyISAM存储引擎,开销小,加锁快;无死锁;锁定粒度大,发生锁冲突的概率最高,并发度最低
InnoDB
InnoDB存储引擎,开销大,加锁慢;会出现死锁,锁定粒度最小,发生锁冲突的概率最低,并发度也最高
MyISAM | InnoDB | |
外键 | 不支持 | 支持 |
事务 | 不支持 | 支持 |
行表锁 | 表锁,操作一条记录也会锁表,不适合高并发 | 行锁,操作时只锁某一行,适合高并发 |
缓存 | 只缓存索引,不缓存真实数据 | 缓存索引和真实数据 |
关注点 | 读性能 | 并发写、事务、资源 |
默认使用 | N | Y |
自带系统表使用 | Y | N |
InnoDB与MyISAM的不同,一是支持事务,二是采用了行级锁
行表锁
读锁(共享锁)、写锁(排他锁)
语法:lock table mylock read,book write (mylock上读锁,book上写锁)
读锁会阻塞写,但不会阻塞读
写锁会把读和写都堵塞
varchar类型如果不加 ' ' 号,会导致索引失效,行锁变表锁
间隙锁:当使用范围查询行时,另一会话插入在该范围内的值时,会导致间隙锁