Java教程

【学习笔记】数据库面试方面

本文主要是介绍【学习笔记】数据库面试方面,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

文章目录

  • 一、数据库事务
    • 概念:
    • 四大特性:
    • 事物的隔离级别:
  • 二、数据库两种引擎(MYISAM和INNODB)
    • 两引擎区别:*
  • 三、数据库索引
    • 索引种类
    • 索引的优缺点
    • 索引最左前缀问题
    • 四、数据库锁
    • 五、其它问题
      • 数据库主从复制
      • MVCC


一、数据库事务

概念:

数据库事务( transaction)是访问并可能操作各种数据项的一个数据库操作序列,这些操作要么全部执行,要么全部不执行,是一个不可分割的工作单位。

四大特性:

原子性: 操作要么全部实行,要么全不执行;
隔离性: 在事务提交之前,其他会话无法看到过程;
一致性: 操作前后,数据的总额数不变;
持久性: 一旦事务提交,对数据的改变是永久性的。

事物的隔离级别:

读未提交: select语句不加锁,易发生脏读、幻读和不可重复读;
读已提交: 易发生幻读和不可重复读;
可重复读: 易发生幻读;
串行化: 无以上问题;但是并发性低,性能差。

脏读: 当前事务访问数据时,访问到其他事务没有提交的数据;
不可重复读: 同一事物内多次读取同一行数据,读到的数据不一样;
幻读: 当前事务执行同样的数据,返回的集合不同(例:增加了一行)。

二、数据库两种引擎(MYISAM和INNODB)

两引擎区别:*

  1. INNODB支持外键,MYISAM不支持,有外键的INNODB表转化成MYISAM表时会失败;
  2. INNODB支持事务,而MYISAM不支持;
  3. MYSIAM支持全文索引,5.6之前的INNODB不支持,5.6及以后的支持
  4. INNODB支持行锁(默认)和表锁;MYISAM支持表锁。查全表时,INNODB要全表扫描,MYISAM不需要,它有一个字段专门存储总行数;
  5. INNODB必须有有主键索引,而MYISAM不必须。INNODB没有指定主键索引时,会自动创建一个隐藏列Row_id来充当默认主键;
  6. MYISAM表格可以被压缩后进行查询操作;
  7. INNODB是聚集索引,用的是b+树,数据文件和索引绑定在一起,表数据文件本身也是索引文件。辅助索引文件需要两次查询,先查到逐渐,再通过主键查到数据。MYISAM是非聚集索引,也是b+树,但索引和数据分开,索引保存数据文件的指针,主键索引和辅助索引独立。即,INNODB的叶子结点存储的是数据文件,辅助索引存储的是主键值;MYISAM叶子结点都是数据文件地址指针。

三、数据库索引

索引种类

  • 普通索引: 普通的索引,没有任何限制;
  • 唯一索引: 索引的值唯一,允许有空值;
  • 主键索引: 特殊的唯一索引,不允许有空值;
  • 全文索引: 针对大数据文件,建成全文索引很慢;
  • 组合索引: 也是联合索引,靠多个字段来提高查询效率;

索引的优缺点

优点: 查询效率快; 缺点: 更新数据效率低,占空间;

索引最左前缀问题

当第二个索引没有使用索引时,第三个索引也无法用索引。

四、数据库锁

乐观锁: 自主实现,通过版本号,写多读少用;
悲观锁: 共享锁,多事务只能读不能写。加 lock in share mode
排它锁: 单事务,只能写不能读。加 for update;
行锁: 用于数据行;
表锁: 用于表。

五、其它问题

long_query问题怎么解决: 设置参数,开启慢日志功能,得到耗时超过一定时间的SQL;
varchar和char的适用场景: varchar长度可变,char长度固定;
数据库连接池的作用: 维护一定数量的连接,减少创建连接的时间。跟快的响应时间,统一管理。
SQL优化:

  • 子查询尽量用left join;
  • limit分布优化,先用id定位,再分页;
  • or条件优化:多个or可以使用union all对结果进行合并,但容易造成结果重复;
  • where代替having,having检索完全部记录才开始过滤;
  • 避免嵌套查询;
  • 多字段联合查询用联合索引。

数据库主从复制

异步复制(默认): 容易造成主从数据库数据不一致,一个数据库为主库(Master),一个是从库(Slave)。slave用两个线程,一个读主库的Binlog日志,并将其存入自己的中继日志中,另一个解析中继日志,执行SQL;Master用一个线程给slave传输日志。
半同步复制: 只有把Master的Binlog日志写到自己的中继日志中,主库才会返回操作完成的反馈,但是性能会有一定的降低。
并行操作: salve多个线程请求Binlog日志。

MVCC

什么是MVCC: MVCC是多版本并发控制。一般在数据库管理系统中,实现数据可的并发访问,在编程语言实现事务内存。
MVCC特点:

  • 每行数据都存在一个版本,每次数据更新时都会更新该版本;
  • 修改时夫指出该版本随意更改,各个事务之间互不干扰;
  • 保存时比较版本号,如果成功,就覆盖原纪录,失败就放弃复制。

INNODB实现MVCC的方式:

  • 事务以排它锁的形式修改原始数据;
  • 把修改之前的数据都存放在undo log,通过回滚指针与主数据关联;
  • 修改成功啥都不做,修改失败则恢复undo log中的数据。
这篇关于【学习笔记】数据库面试方面的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!