Java面试知识点之数据库篇(一)
前言:数据库的相关知识,在面试中也经常出现,笔者认为非常有必要对此类知识进行相关总结。
1.索引
索引是对数据库表中一列或多列的值进行排序的结构,是帮助数据库高效获取数据的数据结构。
通俗理解:索引就是加快检索表中数据的方法。数据库的索引类似于书籍的索引。在书籍中,索引允许用户不必翻阅完整个书就能迅速地找到所需要的信息;在数据库中,索引也允许数据库程序迅速地找到表中的数据,而不必扫描整个数据库,从而提高查询速度。
索引的优点:
1)通过创建唯一性索引,可以保证数据库表中每一行数据的唯一性。
2)可以大大加快数据的检索速度,这也是创建索引的最主要的原因。
3)可以加速表和表之间的连接,特别是在实现数据的参考完整性方面特别有意义。
4)在使用分组和排序子句进行数据检索时,同样可以显著减少查询中分组和排序的时间。
5)通过使用索引,可以在查询的过程中,使用优化隐藏器,提高系统的性能。
索引的缺点:
1)创建索引和维护索引要耗费时间,这种时间随着数据量的增加而增加。
2)索引需要占物理空间,除了数据表占数据空间之外,每一个索引还要占一定的物理空间,如果要建立聚簇索引,那么需要的空间就会更大。
3)当对表中的数据进行增加、删除和修改的时候,索引也要动态的维护,这样就降低了数据的维护速度。
具体参考:
https://blog.csdn.net/u010425776/article/details/60968248
http://www.cnblogs.com/KissKnife/archive/2009/03/30/1425534.html
https://www.cnblogs.com/aspwebchh/p/6652855.html
https://www.cnblogs.com/tgycoder/p/5410057.html
2.事务
事务(Transaction)是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。
其四个基本特性为:原子性、一致性、隔离性和持久性。
对一致性的理解:
一致性是指在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏。也就是说数据库事务不能破坏关系数据的完整性以及业务逻辑上的一致性。
拿“转账”例子说明:
假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
具体参考:
https://blog.csdn.net/u010425776/article/details/60968283
https://www.cnblogs.com/hebao0514/p/5490698.html
https://www.cnblogs.com/fjdingsd/p/5273008.html
3.数据库的乐观锁和悲观锁
悲观锁:假定会发生并发冲突,屏蔽一切可能违反数据完整性的操作。
乐观锁:假设不会发生并发冲突,只在提交操作时检查是否违反数据完整性。
具体参考:
http://www.open-open.com/lib/view/open1452046967245.html
4.数据库三大范式
具体参考:
https://blog.csdn.net/u010425776/article/details/60968300
5.数据库连接池
数据库连接池(Connection pooling)是程序启动时建立足够的数据库连接,并将这些连接组成一个连接池,由程序动态地对池中的连接进行申请,使用,释放。
具体参考:
https://www.cnblogs.com/aspirant/p/6747238.html
https://blog.csdn.net/u011088260/article/details/53311165
by Shawn Chen,2018.4.8日,晚。