数据库面试题(更新中...)

1.数据库中的事务理解

(1)事务:可以理解为一个操作序列(类似于程序代码序列),但是该操作序列需要满足四大特性

(2)四大特性

  • 原子性:事务作为一个整体而执行,内部所有操作要么不执行,要么全部执行。中途出现错误,则回滚
  • 一致性:事务应确保数据库状态从一个一致性变为另一个一致性状态。一致性表示:数据库中数据应满足完整性约束
  • 隔离性:多个事务并发执行时,事务之间不会相互影响
  • 持久性:事务一旦提交,对数据库修改结果应永久保存在数据库中

(3)并发下事务产生的问题

  • 脏读:事务A读到了事务B还没有提交的数据
  • 不可重复读:在一个事务里面对某种数据读取两次,但读出的数据不一致
  • 幻读:在一个事务的操作里面发现了未被操作的数据(事务发生了修改、删除)

  注:不可重复读旨在数据修改,幻读旨在新增或者删除

(4)事务隔离级别--解决上述问题

  事务隔离级别就是为了解决上面几种问题而诞生的,事务隔离级别越高,并发下产生问题越少,付出能耗越大,因此必须权衡并发和性能。

  • 读未提交:能够读到那些没有被提交的数据,这种方式无法解决脏读,不可重复读,幻读等
  • 读已提交:可读到那些已经提交的数据,防止脏读,但不能解决不可重复读和幻读
  • 重复读取:数据读出后加锁,明确数据读出来后是最新的。不能解决幻读
  • 串行化:挨个运行一个事务所有子事务后运行另外一个事务的子事务。可解决所有

2.数据库索引

  索引的结构一般有平衡树(B树,B+树),Hash表等

索引缺点:

创建动态维护索引需要时间

索引需要占用物理空间

 

(1)聚焦索引

  • 如果给表加了主键,整个表变成了一个索引(聚焦索引)。主键的作用就是把表的数据格式转换为索引(平衡树)的格式放置。
  • 优势:数据有序存放;查找时很快,分叉越多,查找越快。
  • 劣势:插入删除需要改变索引结构(B+树结构),效率低

(2)非聚焦索引

  • 通过非聚焦索引可以查到记录对应的主键值,再使用主键值通过聚焦索引查找到需要的数据;相当于索引页里存放索引,指向专门数据页的数

 

3.数据库中的主键和外键

(1)主键:数据库中一条数据多个属性当中,如果某一个属性组能唯一标识一条记录,该属性组可成为一个主键;主键只能有一个

  外键:表的外键是另一个表的主键,外键可以重复,可为空;主要用于与另一张表的关联;一个表可以有多个外键

 

 

4.关系型和非关系型数据库

(1)关系型数据库:采用了关系模型来组织数据的数据库,关系模型指的就是二维表格模型

  • 优点:
    • 容易理解
    • 使用方便:可使用通用的SQL语言操作
    • 易于维护:丰富的完整性
  • 缺点:
    • 并发高时IO操作时瓶颈
    • 查找时比较慢

(2)非关系型数据库

  • 非关系型数据库以键值对存储,

 

 

5.数据库有哪些锁

(1)共享锁:多个事务可封锁一个共享页。锁共有的,但是同时只允许一个事务操作

(2)排他锁:仅允许一个事务封锁此页。其他来了加自己的锁

(3)乐观锁:乐观锁认为一个用户读数据的时候,别人不会去写自己所读的数据;

(4)悲观锁:悲观锁就刚好相反,觉得自己读数据库的时候,别人可能刚好在写自己刚读的数据。悲观锁在自己读写数据时不允许别的事务操作,结束后才允许别的事务操作

 

posted @ 2019-04-18 10:12  jainss  阅读(204)  评论(0编辑  收藏  举报