数据库作为组织、存储和管理数据的仓库,在后端开发中扮演着不可或缺的角色,前面已经讲了Java基础篇的一些面试题,现在开始数据库篇,主要以Mysql和Redis作为讲解的重点,这两种数据库也是关系型数据库和非关系型数据库的典型代表。
下图为市场数据库占有份额。值得一提的是前两位都是Oracle公司的,开发mysql的公司被Sun收购了,Sun又被Oracle收购了。
为什么要用数据库存取数据
问:使用数据库的好处是什么?/为什么要使用数据库存取数据?
- 便于持久化保存。
这里就要谈到持久化的概念,所谓持久化就是将RAM中的数据保存的ROM中,因为RAM是断电易失的,对于需要长时间保存的数据可以采用各种各样的方式进行保存,比如保存为txt文本,保存为xml文件等,数据库也是一种持久化的保存方式。 - 便于查找
其实说便于增删改查更准确,对于大量数据的情况下,采用数据库保存更方便增删改查。因为数据库保存数据时运用了各种数据结构与算法(比如树),这样大大提高了数据的查找速度。 - 存储的数据类型多样
整形、浮点型、字符串……等等
主流的数据库分类方式
目前最为主流的数据库分类方式是按照关系型数据库和非关系型数据库来分的
关系型数据库
简单的说就是由二维表及其之间的联系所组成的一个数据组,通常情况关系型数据库都是一个个的表格,表格之间可以以外键相互关联。这样带来了一些好处,当然,也有一些弊端。
问:关系型数据库的优势和劣势分别是什么?
优势:
- 容易理解:二维表结构是非常贴近逻辑世界的一个概念,关系模型相对网状、层次等其他模型来说更容易理解。
- 使用方便:通用的SQL语言使得操作关系型数据库非常方便。
- 事务支持:使得对于安全性能很高的数据访问要求得以实现。
劣势:
- 读写性能比较差,尤其是海量数据的高效率读写;
- 固定的表结构,灵活度稍欠;
- 高并发读写需求,传统关系型数据库来说,硬盘I/O是一个很大的瓶颈。
非关系型数据库
非关系型数据库严格上不是一种数据库,应该是一种数据结构化存储方法的集合,可以是文档或者键值对等,以大家最熟悉的redis为例,就是典型的key-value形式数据库。
问:非关系型数据库的优缺点?
优点:
- 格式灵活:存储数据的格式可以是key,value形式、文档形式、图片形式等等,文档形式、图片形式等等,使用灵活,应用场景广泛,而关系型数据库则只支持基础类型。
- 速度快:nosql可以使用硬盘或者随机存储器作为载体,而关系型数据库只能使用硬盘;
- 高扩展性;
- 成本低:nosql数据库部署简单,基本都是开源软件。NoSQL可以看做是对 SQL 做出了补充,比如实际开发中,有很多业务需求,其实并不需要完整的关系型数据库功能,非关系型数据库的功能就足够使用了。这种情况下,使用 性能更高 、 成本更低 的非关系型数据库当然是更明智的选择。比如:日志收集、排行榜、定时器等。
缺点:
- 不提供sql支持,学习和使用成本较高;
- 无事务处理;(redis其实也有,只是不好用)
- 数据结构相对复杂,复杂查询方面稍欠。
结构化查询语言SQL
关系型数据库必须遵从结构化查询语言SQL的要求,也就是说Oracle和Mysql语法虽然有不同的地方,但都不能违背SQL的要求。
问:SQL语言分为哪四种?
- DDL(Data Definition Language) 数据定义语言,用来操作数据库、表、列等; 常用语句:CREATE、 ALTER、DROP
- DML(Data Manipulation Language) 数据操作语言,用来操作数据库中表里的数据;常用语句:INSERT、 UPDATE、 DELETE
- DCL(Data Control Language) 数据控制语言,用来操作访问权限和安全级别; 常用语句:GRANT、DENY
- DQL(Data Query Language) 数据查询语言,用来查询数据 常用语句:SELECT
DML和DQL是后端开发人员最常用的,另外两种大公司都会交给DBA去做,开发人员是没有权限随便删除表格或者新建数据库的。
Mysql中常用的运算符
运算符种类非常多,我尽可能都列出来,但是很多并不常用,有印象就行。
1. 算术运算符
主要是加、减、乘、除、取模:和Java语言中用法基本一致
2. 比较运算符
主要是等于、大于、小于、大于等于、小于等于、不等于、安全等于,主要说一下不等于和安全等于,其它的和Java一致
- 不等于(<>和!=):用法和Java一致,只是有两种写法(<>和!=)。
- 安全等于:主要是用来解决数据库中存在的空数据(NULL)问题,mysql中有一个问题就是当比较一个数据和NULL的时候会返回NULL,而安全等于运算符解决了这个问题,
· 当两个NULL比较 时,其返回值为 1 而不为 NULL;
· 当一个非空数与 NULL 比较时,其返回值为 0 而不为 NULL。
3. 非符号类运算符
4. 逻辑运算符
Mysql支持与、或、非、异或四种逻辑运算
5. 位运算符
类似于Java中的位运算,Mysql支持6种位运算,分别为按位与、或、异或、取反、右移、左移。
6. 运算符的优先级
优先级由低到高排列如下(1是最后考虑,15是最优先考虑)