Mysql、Oracle——面试题汇总

  1. 介绍下MySQL和Oracle
    MySQL是一个轻量级的关系型数据库(开源)
    Oracle是一个重量级的关系型数据库(收费)

  2. MySQL的两种存储引擎
    INNODB: 支持事务,支持外键,支持表级锁、行级锁
    MYISAM: 不支持事务,不支持外键,支持表级锁

  3. MySQL和Oracle区别
    (1) MySQL支持自增主键(auto increment),而Oracle支持序列
    (2) MySQL占内存小,Oracle占内存大
    (3) MySQL字符串用双引号,Oracle用单引号
    (4) MySQL分页用limit,Oacle使用rownum表名位置,而且只能用小于
    (5) MySQL用0、1判断真假,Oracle用true、false
    (6) MySQL的事务级别是repeatable read,oracle的事务隔离性是read committed

  4. 事务的四大特性(ACID)
    原子性(Atomicity):事务的所有操作要么全部成功,要么全部回滚
    一致性(Consistency):事务必须使数据库从一个一致性状态变换到另一个一致性状态
    隔离性(Isolation):多个事务并发访问数据库时,如何相互干扰
    持久性(Durability):事务对数据库的修改是永久的

  5. 事务隔离性的四个级别
    read uncommitted: 写的时候不让再写。 脏读+不可重复读+幻读
    read committed:未提交的写事务不让其他事务读写。 不可重复读+幻读
    repeatable read:写的时候不允许读写,读的时候不允许写。 幻读
    serializable:事务一个一个执行。 无问题

MySQL默认第三个,Oracle默认第二个

  1. 事务并发问题
    脏读:A事务读取了B事务尚未提交的数据,之后B事务回滚了,那么A事务读的就是脏数据。
    不可重复读:A事务对一个数据读取了两次,但是得到了不同的结果。(update)
    幻读:A事务查询了两次,得到的数量不同。(insert、delete)

  2. 事务的7种传播方式(定义在枚举类Propagation中)
    事物的传播就是方法A调用开启事务的方法B时,方法B如何传播
    (1) REQUIRED(0)使用方法A的事务,如果没有就新建一个事务
    (2) SUPPORTS(1)使用方法A的事务,如果没有就不使用事务
    (3) MANDATORY(2)强制使用方法A的事务,如果没有就抛出异常
    (4) REQUIRES_NEW(3)创建一个新事物,如果有就把当前事务挂起
    (5) NOT_SUPPORTED(4)不使用事务,如果有就把当前事务挂起
    (6) NEVER(5)不使用事务,如果有就抛出异常
    (7) NESTED(6)嵌套事务。方法B的事务 嵌套在方法A中使用

嵌套事务:子事务回滚,不影响父事务。先提交子事务,再提交父事务。父事务回滚,子事务也会回滚。

  1. 索引是什么?
    索引保存在磁盘中,是用来提高查询速度的,缺点是更新数据时需要同时更新索引,所以效率低。

  2. 索引的实现方式?
    索引有哈希索引和B+树索引两种,哈希索引适合等值查询,B+树索引适合范围查询。

  3. 索引的分类?
    普通索引:最基本的索引,没有任何限制
    唯一索引: 该列的值必须唯一,但允许有空值
    主键索引: 特殊的唯一索引(不允许有空值)
    全文索引: 针对较大的数据,但是生成全文索引很耗费时间和空间
    组合索引: 遵循“最左前缀”原则,用于更好地提高查询效率

  4. 索引失效条件?
    (1) where条件中用了 or
    (2) where条件中用了 null判断
    (3) where条件中用了< > !=
    (4) like查询中,以%开头
    (5) 用到了内部函数
    ……………

  5. 索引为什么用B+树,而不是红黑树和B树
    因为B+树相比来说,更矮更宽,所以查询层次更浅,更何况红黑树每次增删,都需要进行数的调整,B树每层存储的数量没有B+树多

  6. 数据库的主从复制
    (1)异步复制

  7. SQL语句的优化
    (1) 单条查询加上limit 1
    (2) 子查询改为 left join
    (3) 避免嵌套查询
    (4) 对多个字段进行等值查询时,用联合索引
    (5) 对常用字段进行查询时,给字段加上索引
    (6) 定期优化表结构
    (7) 加上缓存

  8. 联合索引的最左前缀问题
    联合索引就是将多个字段建立索引,比如(name,age),对于这样的索引,如果查询条件不先用 name= “xxx”,而是直接用 age = “xxx”,是不会用到索引的。

  9. varchar和char的使用场景

  10. 数据库连接池的作用?
    数据库连接池主要负责分配、管理和释放数据库连接,所以使用数据库连接池可以:
    (1)减少了创建连接的时间
    (2)同时方便统一管理

  11. 锁有哪些?
    (1) 乐观锁 写比较少 ,自己实现,通过版本号
    (2) 悲观锁 写比较多,所以多个事务只能读不能写,lock in share mode
    (3) 排他锁 用于一个事务,只能写,for update
    (4) 行锁 作用于某一行
    (5) 表锁 作用于表

  12. 死锁怎么解决?
    kill 进程ID

  13. Spring的事务和数据库的事务有什么区别?
    Spring的事务是对数据库事务的封装,本质还是使用数据库事务。
    但是Spring的事务隔离级别多了个DEFAULT(就是使用数据库默认的事务级别)

你可能感兴趣的:(mysql,oracle,数据库)