常见问题
- MyISAM与InnoDB关于锁方面的区别是什么
 - 数据库事务的四大特性
 - 事务隔离级别以及各级别下的并发访问问题
 - InnoDB可重复读隔离级别下如何避免幻读
 - RC、RR级别下的InnoDB的非阻塞读如何实现
 
MyISAM与InnoDB关于锁方面的区别是什么
- MyISAM默认用的是表级锁,不支持行级锁
 - InnoDB默认用的是行级锁,也支持表级锁
 
select count(*) from person_info_large;
select count(*) from person_info_myisam;
select * from person_info_myisam where id between 1 and 2000000;update person_info_myisam set account = account where id = 2000001;上一个表锁,读锁不释放的话,写锁会被阻塞。
lock table person_info_myisam read | write;
unlock tables;MyISAM适合的场景
- 频繁执行全表count语句
 - 对数据进行增删改的频率不高,查询非常频繁
 - 没有事务
 
InnoDB适合的场景
- 数据增删改差相当频繁
 - 可靠性要求比较高,要求支持事务
 
数据库锁的分类
- 锁的粒度划分:可分为表级锁、行级锁、页级锁
 - 锁级别:共享锁、排它锁
 - 加锁方式:自动锁、显式锁
 - 操作划分:DML锁、DDL锁
 - 使用方式:乐观锁、悲观锁
 
InnoDB可重复读隔离级别下如何避免幻读
- MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
 - 当前读和快照读
 
当前读就是加了锁的增删改查语句,它读取的是记录的最新版本。
快照读就是不加锁的select操作,它可能读到的不是最新数据,而是之前版本的数据。
- undo log
 
undo日志用于存放数据修改被修改前的值。
具体可以查看这篇文章:https://segmentfault.com/a/1190000021424784










