数据库
1、数据库设计三范式:
- 1NF:数据库表中的每一列都是不可再分的属性值,确保每一列的原子性,两列的属性相近或相似或一样,尽量合并属性一样的列,确保不产生冗余数据。
- 2NF:确保表中的每列都和主键相关,在一个数据库表中,一个表中只能保存一种数据,不可以把多种数据保存在同一张数据库表中。
- 3NF:确保每列都和主键列直接相关,而不是间接相关
2、关系型数据库有:
MySql、SqlServer、Oracle
3、什么是关系型数据库?
采用关系模型来组织数据的数据库,其以行和列的形式组织数据,一系列的行和列组成了表,一组表组成了数据库。
5、Java常见的开源数据库连接池有哪些?
-
DBCP
DBCP是一个依赖Jakarta commons-pool对象池机制的数据库连接池.DBCP可以直接的在应用程序中使用,Tomcat的数据源使用的就是DBCP。
-
c3p0
c3p0是一个开放源代码的JDBC连接池,它在lib目录中与Hibernate一起发布,包括了实现jdbc3和jdbc2扩展规范说明的Connection 和Statement 池的DataSources 对象。
-
Druid
阿里出品,淘宝和支付宝专用数据库连接池,但它不仅仅是一个数据库连接池,它还包含一个ProxyDriver,一系列内置的JDBC组件库,一个SQL Parser。支持所有JDBC兼容的数据库,包括Oracle、MySql、Derby、Postgresql、SQL Server、H2等等。
6、数据库MySQL,Oracle,SqlServer分页时用的语句
-
Mysql:使用limit关键字
Select * from 表名 where 条件 limit 开始位置,长度。通过动态的改变开始和结束位置的值来实现分页。
-
Oracle:通过rownum来实现
select * from ( select rownum rn,t.* from addressbook where rownum<= 20 ) where rownum > 10
-
Sqlserver:
select top 20 * from addressbook where id not in (select top 10 id from addressbook)
7、数据库去空格
使用replace(column,’ ‘,’’)方法解决
8、什么是索引?
定义:索引是一种排好序的快速查找的数据结构,它帮助数据库高效的进行数据的检索。在数据之外,数据库系统还维护着满足特定查找算法的数据结构(额外的存储空间),这些数据结构以某种方式指向数据,这样就可以在这些数据结构上实现高效的查找算法。这种数据结构就叫做索引。
**分类:**普通索引、唯一索引、复合索引
**索引常见的数据结构:**二叉树、红黑树(JDK8 HashMap)、Hash、Btree、B+Tree …
索引优化原则:
- 对查询频次较高,且数据量比较大的表建立索引。
- 索引字段的选择,最佳候选列应当从where子句的条件中提取
- 使用唯一索引,区分度越高,使用索引的效率越高。
- 使用短索引,索引创建之后也是使用硬盘来存储的,因此提升索引访问的I/O效率
- 利用最左前缀,N个列组合而成的组合索引,那么相当于是创建了N个索引
9、数据库的搜索引擎:
- InnoDB:
Mysql
的默认存储引擎。InnoDB
存储引擎提供了具有提交、回滚、崩溃恢复能力的事务安全。 但是对比MyISAM
的存储引擎,InnoDB
写的处理效率差一些,并且会占用更多的磁盘空间以保留数据和索引。 - MyISAM:不支持事务、也不支持外键,其优势是访问的速度快,对事务的完整性没有要求或者以SELECT、INSERT 为主的应用基本上都可以使用这个引擎来创建表 。
- **Memory:**存储引擎将表的数据存放在内存中。每个MEMORY表实际对应一个磁盘文件,格式是.frm ,该文件中只 存储表的结构,而其数据文件,都是存储在内存中,这样有利于数据的快速处理,提高整个表的效率。MEMORY 类型的表访问非常地快,因为他的数据是存放在内存中的,并且默认使用HASH索引 , 但是服务一旦关闭,表中的 数据就会丢失。
- **MERGE:**存储引擎是一组
MyISAM
表的组合,这些MyISAM
表必须结构完全相同,MERGE表本身并没有存储数据,对 MERGE类型的表可以进行查询、更新、删除操作,这些操作实际上是对内部的MyISAM
表进行的。