常见问题
- 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
总结
MySQL 很多细节会在后续的学习过程中提到,欢迎关注哦!