一、数据库
1.什么是数据库
数据库是一类软件,这一类软件可以用来“管理数据”(能对数据进行保存和增删改查),在学习数据结构时我们也是在对数据进行增删改查,那么他们有什么区别呢?区别就在与数据结构是实现数据增删改查的具体方式,数据库则是管理数据的软件,实现数据库软件内部就用到了大量的数据结构。在我们电脑上存储与管理数据应用的是文件夹,那么有文件夹为什么还要弄一个数据库呢?因为文件夹有几个缺点:文件夹中数据不够安全,不利于进行数据的查询和管理,不利于存储海量的数据,在程序中控制不方便,为了解决上述问题,有专家设计出了更加利于管理数据的软件——数据库,它可以更有效的管理数据。数据库还可以提供远程服务,既通过远程连接来使用数据库,因此也称为数据库服务器。
2.数据库的分类
数据库可以分为关系型数据库和非关系型数据库,在后面文章我主要进行操作与讲解的MySQL就是关系型数据库,使用表的结构来组织数据。
(1)关系型数据库
关系型数据库(RDBMS)是指采用了关系模型来组织数据的数据库。简单来说,关系模型指的就是二维表格模型,而一个 关系型数据库就是由二维表及其之间的联系所组成的一个数据组织。基于标准的SQL,只是内部一些实现有区别。常用的关系型数据库如:
- Oracle:甲骨文产品,适合大型项目,适用于做复杂的业务逻辑,如ERP、OA等企业信息系 统。收费。
- MySQL:属于甲骨文,不适合做复杂的业务。开源免费。
- SQL Server:微软的产品,安装部署在windows server上,适用于中大型项目。收费。
(2)非关系型数据库
不规定基于SQL实现。现在更多是指NoSQL数据库,如:
- 基于键值对(Key-Value):如Memcache、Redis
- 基于文档型:如MongoDB
- 基于列族:如Hbase
- 基于图型:如Neo4j
二、MySQL基础
1.结构
MySQL是一个“客户端”-“服务器”结构程序(C/S结构),主动发起通信的一方称为“客户端”(Client),被动接受通信的一方称为“服务器”(Server),这里客户端给服务器发送的数据称为“请求”(Request),服务器给客户端返回的数据称为“响应”(Response),客户端程序和服务器之间数据交互方式最主要就是通过“网络”,客户端程序一般就是指咱们普通用户的应用程序,服务器一般是藏在公司机房中的,我们无法直接感触到。
2.存储方式
上面介绍了MySQL是一个C/S结构的程序,“服务器”部分是他的本体,用来存储和管理数据,MySQL服务器又是使用硬盘来进行存储数据,所以像我们在电脑上下载的MySQL就是将MySQL的服务器与客户端都下到了我们电脑上,进而我们在对MySQL操作时,MySQL就会对我们的硬盘进行相应的操作。
3.数据组织方式
(1)数据库(database)
这里我们所说的数据库与上面介绍的数据库不是一个意思,这里的数据库是一个逻辑的集合,一个MySQL服务器上可以有很多这样的数据集合,在实际开发中会把一些有关联的数据放到一起就构建成了数据集合。
(2)数据表(table)
在一个数据库中可以储存不同的数据,每组数据都使用数据表来存储,这就相当于“表格”类似于Excel,一个表里有很多行(row),每一行都是一条“记录”/“数据”,每一行又包含了很多列,每一列也称为一个“字段”(field)。下面我画一个图来直观展示数据库与数据表的关系:
(3)常用数据类型
数据类型 | 大小 | 说明 | 对应Java类型 |
---|---|---|---|
bit[(M)] | M指定位数,默认为1 | 二进制数,M范围从1到64,存储数值范围从0到2^M-1 | 常用Boolean对应bit,此时默认位数是1,即只能存0和1 |
tinyint | 1字节 | Byte | |
smallint | 2字节 | Short | |
int | 4字节 | Integer | |
bigint | 8字节 | Long | |
float(M,D) | 4字节 | 单精度,M指定长度,D指定小数位数。会发生精度丢失 | Float |
double(M,D) | 8字节 | Double | |
decimal(M,D) | M/D最大值+2 | 双精度,M指定长度,D表示小数点位数。精确数值 | BigDecimal |
numeric(M,D) | M/D最大值+2 | 和decimal一样 | BigDecimal |
varchar(size) | 0~65535字节 | 可变长度字符串 | String |
text | 0~65535字节 | 长文本数据 | String |
mediumtext | 0~16777215字节 | 中等长度文本数据 | String |
blob | 0~65535字节 | 二进制形式的长文本数据 | byte[] |
detetime | 8字节 | 范围从1000到9999年,不会进行时区的检索及转换。 | java.util.Date、java.sql.Timestamp |
timestamp | 4字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |
在这里,我对上表部分数据类型再进行进一步的说明:
①关于float和double精度丢失的演示:
上面演示中可以看见0.1与0.2相加结果并不与0.3相等,这是因为IEEE754标准导致的,所以在进行两个浮点数比较时,不能使用==,而是需要通过作差得出小于一个误差值的方式,这里就又要说到decimal这个类型了,这个在上述表格中显示是精确数值,那么它是如何做到的呢?decimal虽然可以表示小数,但是它并不是按照IEEE754的标准方式来表示,而是类似于“字符串”的方式来进行表示,所以使用decimal时会付出更多的空间,运算的时候也会消耗更多的时间,但是保存数据是更精确的。
②关于varchar(size)中size的进一步解释:
varchar(size)是可变长的字符串,这里的size表示最大长度,假设这里size设置为1024,意思就是这一列最多可以存储1024个字符,如果当前字符串比较短,可能就占10个字符那么长,这里会根据存储内容进行动态扩容,设置长度上限是为了兜底,数据库存储数据的时候,需要关注当前占用多少空间的。另外,带有中文,一个汉字也算一个字符,例如varchar(10)可以存储10个汉字。
三、结语
文章到这也算是接近尾声了,从今天开始,博主就开始数据库相关的知识分享了,计划是对关系型数据库和非关系型数据库都进行讲解,这里关系型数据库主要就是选取MySQL进行讲解,非关系型数据库会选择Redis进行讲解,本篇文章以及后续文章有什么错误或者问题欢迎在评论区留言,博主一定会尽自己所能帮助你,如果感觉本篇文章写的还不错,麻烦点赞收藏支持一波啦~~你的支持就是我持续更新的动力。