常见问题

  • 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可重复读隔离级别下如何避免幻读

  1. MVCC(Mutil-Version Concurrency Control),就是多版本并发控制。MVCC 是一种并发控制的方法,一般在数据库管理系统中,实现对数据库的并发访问。
  2. 当前读和快照读

当前读就是加了锁的增删改查语句,它读取的是记录的最新版本。

快照读就是不加锁的select操作,它可能读到的不是最新数据,而是之前版本的数据。

  1. undo log

undo日志用于存放数据修改被修改前的值。

具体可以查看这篇文章:​​https://segmentfault.com/a/1190000021424784​


总结

MySQL 很多细节会在后续的学习过程中提到,欢迎关注哦!