小滴课堂-学习笔记:MySQL数据库的面试题

56 篇文章 0 订阅
15 篇文章 0 订阅

logo 愿景:"让编程不再难学,让技术与生活更加有趣"


更多架构课程请访问 xdclass.net

 

目录

第1集 常说的事务ACID是什么

第2集 脏读-不可重复读-幻读你知道多少

第3集 Mysql常见的存储引擎你知道不

第4集 存储引擎InnoDB、MyISAM异同点和选择

第5集 Mysql数据库索引你知道多少

第6集 数据库索引的好处和坏处,你常用的最佳实践

干货文档


第1集 常说的事务ACID是什么

简介:是否掌握事务的ACID原理

  • 考点:是否掌握事务的ACID原理
  • 难度:【 **】
  • 你知道Mysql事务的四大特性不,简单说下



事务的四大特性ACID
原子性Atomicity:
  一个事务必须被事务不可分割的最小工作单元,整个操作要么全部成功,要么全部失败,一般就是通过commit和rollback来控制
  
一致性Consistency:
  数据库总能从一个一致性的状态转换到另一个一致性的状态,比如小滴课堂下单支付成功后,开通视频播放权限,只要有任何一方发生异常就不会成功提交事务
  
隔离性Isolation:
  一个事务相对于另一个事务是隔离的,一个事务所做的修改是在最终提交以前,对其他事务是不可见的
  
持久性Durability:
  一旦事务提交,则其所做的修改就会永久保存到数据库中。此时即使系统崩溃,修改的数据也不会丢失


 

 

第2集 脏读-不可重复读-幻读你知道多少

简介:考查数据库隔离级别导致的问题

  • 考点:是否掌握数据库常见隔离级别和对应导致的问题
  • 难度:【 ** **】
  • 能否简单解释下脏读、不可重复读、幻读的意思



脏读: 事务中的修改即使没有提交,其他事务也能看见,事务可以读到未提交的数据称为脏读
​
不可重复读: 同个事务前后多次读取,不能读到相同的数据内容,中间另一个事务也操作了该同一数据
​
幻读:当某个事务在读取某个范围内的记录时,另外一个事务又在该范围内插入了新的记录,当之前的事务再次读取该范围的记录时,发现两次不一样,产生幻读
​
​
幻读和不可重复读的区别是:前者是一个范围,后者是本身,从总的结果来看, 两者都表现为两次读取的结果不一致


常见的隔离级别由低到高有哪几种,mysql默认是哪种




事务的隔离级别越高,事务越安全,但是并发能力越差。
​
Read Uncommitted(未提交读,读取未提交内容)
  事务中的修改即使没有提交,其他事务也能看见,事务可以读到为提交的数据称为脏读
  也存在不可重复读、幻读问题
​
例子:
  小滴课堂运营小姐姐配置了一个课程活动,原价500元的课程,配置成50元,但是事务没提交。 
  你刚好看到这个课程那么便宜准备购买,但是Anna小姐姐马上回滚了事务,重新配置并提交了事务,你准备下单的时候发现价格变回了500元
​
​
​
Read Committed(提交读,读取提交内容)
  一个事务开始后只能看见已经提交的事务所做的修改,在事务中执行两次同样的查询可能得到不一样的结果,也叫做不可重复读(前后多次读取,不能读到相同的数据内容),也存幻读问题
  
例子:
  老王在小滴课堂有1000积分,准备去兑换《面试专题课程》,查询数据库确实有1000积分
  但是老王的女友同时也在别的地方登录,把1000积分兑换了《SpringCloud微服务专题课程》,且在老王之前提交事务;当系统帮老王兑换《面试专题课程》是发现积分预计没了,兑换失败。
  
  老王事务A事先读取了数据,他女友事务B紧接了更新了数据且提交了事务,事务A再次读取该数据时,数据已经发生了改变
  
  
  
Repeatable Read(可重复读,mysql默认的事务隔离级别)
  解决脏读、不可重复读的问题,存在幻读的问题,使用 MMVC机制 实现可重复读
  
  例子
  老王在小滴课堂有1000积分,准备去兑换《面试专题课程》,查询数据库确实有1000积分
  老王的女友同时也在别的地方登录先兑换了这个《面试专题课程》,老王的事务提交的时候发现存在了,之前读取的没用了,像是幻觉
​
  幻读问题:MySQL的InnoDB引擎通过MVCC自动帮我们解决,即多版本并发控制
​
Serializable(可串行化)
  解决脏读、不可重复读、幻读,可保证事务安全,但强制所有事务串行执行,所以并发效率低


 

第3集 Mysql常见的存储引擎你知道不

简介:考查mysql的存储引擎

  • 考点:是否知道Mysql的存储引擎

  • 难度:【 **】

  • 说下你知道Mysql常见的存储引擎,新版Mysql默认是哪个

     

     

    
    常见的有多类,InnoDB、MyISAM、MEMORY、MERGE、ARCHIVE、CSV等
    一般比较常用的有InnoDB、MyISAM
    MySQL 5.5以上的版本默认是InnoDB,5.5之前默认存储引擎是MyISAM
    
    
    

     

 

 

 

第4集 存储引擎InnoDB、MyISAM异同点和选择

简介:考查mysql的存储引擎InnoDB&MyISAM的异同和选择

  • 考点:是否了解Mysql的存储引擎InnoDB&MyISAM区别和选择问题
  • 难度:【 ** **】
  • mysql的存储引擎 innodb和myisam有什么区别,应该怎么选择
区别项Innodbmyisam
事务支持不支持
锁粒度行锁,适合高并发表锁,不适合高并发
是否默认默认非默认
支持外键支持外键不支持
适合场景读写均衡,写大于读场景,需要事务读多写少场景,不需要事务
全文索引不支持,可以通过插件实现, 更多使用ElasticSearch支持全文索引

 

 

 

 

 

 

第5集 Mysql数据库索引你知道多少

简介:考查mysql的功能索引掌握情况

  • 考点:mysql的功能索引
  • 难度:【 ** **】
  • mysql常用的功能索引有哪些
  • 分别在什么场景下使用
  • 创建语句是怎样的
索引名称特点 创建语句
普通索引最基本的索引,仅加速查询 CREATE INDEX idx_name ON table_name(filed_name)
唯一索引加速查询,列值唯一,允许为空;
组合索引则列值的组合必须唯一
 CREATE UNIQUE INDEX idx_name ON table_name(filed_name_1,filed_name_2)
主键索引加速查询,列值唯一,
一个表只有1个,不允许有空值
 ALTER TABLE table_name ADD PRIMARY KEY ( filed_name )
组合索引加速查询,多条件组合查询 CREATE INDEX idx_name ON table_name(filed_name_1,filed_name_2);
覆盖索引索引包含所需要的值,不需要“回表”查询,
比如查询 两个字段,刚好是 组合索引 的两个字段
  
全文索引对内容进行分词搜索,仅可用于Myisam, 更多用ElasticSearch做搜索 ALTER TABLE table_name ADD FULLTEXT ( filed_name )

 

 

 

 

第6集 数据库索引的好处和坏处,你常用的最佳实践

简介:讲解索引的使用场景和注意事项

  • 考点:考查索引的使用场景和注意事项
  • 难度:【 ** **】
  • 你们线上数据量每天有多少新增,都是存储在mysql库吗,有没做优化



中型公司或者业务发展好的公司,一天新增几百万数据量
​
业务核心数据存储在Mysql里面,针对业务创建合适的索引
​
打点数据、日志等存储在ElasticSearch或者MongoDB里面

 

  • 你创建索引的时候主要考虑啥,使用索引的优缺点有哪些,使用应该注意些什么



考虑点:结合实际的业务场景,在哪些字段上创建索引,创建什么类型的索引
​
索引好处:
  快速定位到表的位置,减少服务器扫描的数据
  有些索引存储了实际的值,特定情况下只要使用索引就能完成查询
​
索引缺点:
  索引会浪费磁盘空间,不要创建非必要的索引
  插入、更新、删除需要维护索引,带来额外的开销
  索引过多,修改表的时候重构索引性能差
​
索引优化实践
  前缀索引,特别是TEXT和BLOG类型的字段,只检索前面几个字符,提高检索速度
  尽量使用数据量少的索引,索引值过长查询速度会受到影响
  选择合适的索引列顺序
  内容变动少,且查询频繁,可以建立多几个索引
  内容变动频繁,谨慎创建索引
  根据业务创建适合的索引类型,比如某个字段常用来做查询条件,则为这个字段建立索引提高查询速度
  组合索引选择业务查询最相关的字段


干货文档

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dev666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值