mysql中的锁有三种锁机制:
(1)表级锁:开销小,加锁快;不会出现死锁,锁定粒度大,发生所冲突的概率最高,并发度最低;
(2)行级锁:开销大,加锁慢;会出现死锁,锁粒度最小,发生锁冲突的概率最小,并发度最高;
(3)页级锁:开销和加锁时间在表级锁和行级锁之间,会出现死锁;锁定粒度位于表锁和行锁之间,并发度一般
选型:要根据实际实现的业务去选择,表级锁适合以查询为主的业务,只有少量按索引条件去更新数据的应用,行级锁适合有大量并发按索引去更新少量数据的操作
MylSAM引擎使用表锁,开销小,加锁快,无死锁,锁定力度大,发生锁冲突的概率最高,并发度最低,不支持事务
加表锁时:读当前表,可以,改当前表,不可以,读其他表:不可以
MylSAM引擎在执行查询语句之前,会自动给涉及到的表中只读锁,在执行增删改操作前,会自动给涉及的表加写锁
表级锁的两种模式:
读锁:读锁不会阻塞读,只会阻塞写。
写锁:写锁会阻塞读和写。
行锁:开销大,加锁慢,会出现死锁,锁定粒度最小,发生锁冲突概率最低,并发度最高
InnoDB和MyISAM最大的不同点:支持事务和采用行锁,外键