从 01 开始 从 01 开始
首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • MySQL
  • Git
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 输入法
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 微信
  • 各大平台
  • RSS
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • 三国杀
  • 关于本站
  • 关于我
  • 网站动态
  • 友人帐
  • 打赏
  • 如何搭建一个博客
  • 关于邮件服务器
  • 本站的分享资料
  • 年度总结

    • 2022 年度总结
    • 2023 年度总结
  • 文章分类
  • 文章标签
  • 文章归档

PeterJXL

首页
  • 计算机简史
  • 数字电路
  • 计算机组成原理
  • 操作系统
  • Linux
  • Docker
  • 计算机网络
  • 计算机常识
  • MySQL
  • Git
  • JavaSE
  • Java 高级
  • JavaEE

    • 构建、依赖管理
    • Ant
    • Maven
    • 日志框架
    • Junit
    • JDBC
    • XML-JSON
  • JavaWeb

    • 服务器软件
    • 环境管理和配置管理-科普篇
    • Servlet
  • Spring

    • Spring基础
  • 主流框架

    • Redis
    • Mybatis
    • Lucene
    • Elasticsearch
    • RabbitMQ
    • MyCat
    • Lombok
  • SpringMVC

    • SpringMVC 基础
  • SpringBoot

    • SpringBoot 基础
  • Windows 使用技巧
  • 输入法
  • 浏览器
  • 终端软件
  • 装机
  • 笔记类软件
  • Markdown
  • 微信
  • 各大平台
  • RSS
  • Office
  • 手机
  • 校招
  • 五险一金等
  • 职场规划
  • 关于离职
  • 杂谈
  • 教程简介
  • 英语学习方法论
  • 字母
  • 音标
  • 单词
  • 语法
  • 英语兔的相关视频
  • Larry 想做技术大佬的相关视频
  • 驾驶技能
  • 住房相关
  • 厨艺
  • 关于税
  • 理财
  • 睡眠
  • 皮肤
  • 口腔健康
  • 学会呼吸
  • 健身日志
  • 漫画

    • 漫画软件
    • 漫画推荐
  • 游戏

    • 三国杀
  • 关于本站
  • 关于我
  • 网站动态
  • 友人帐
  • 打赏
  • 如何搭建一个博客
  • 关于邮件服务器
  • 本站的分享资料
  • 年度总结

    • 2022 年度总结
    • 2023 年度总结
  • 文章分类
  • 文章标签
  • 文章归档
  • 计算机历史

  • 数字电路

  • 计算机组成原理

  • 操作系统

  • Linux

  • 计算机网络

  • Git

  • 计算机小知识

  • MySQL

    • 教程概述
    • 数据的存储
      • 数据管理技术的产生和发展
      • 什么是数据库
      • 学习数据库的必要性
      • 小结
      • 相关文章
    • 数据库的安装
    • 数据库的启停与连接
    • 数据库的管理
    • SQL概述
    • 表的管理
    • seletct基础
    • 运算符
    • 聚合查询
    • 排序
    • 数据的插入
    • 数据的删除
    • 数据的更新
    • 事务
    • 视图
    • 子查询
    • 函数
    • 谓词
    • CASE表达式
    • 集合运算
    • 联结-join
    • SQL入门小结
    • 更多数据库
    • MySQL的数据类型
    • 命令行的一些用法
    • 用户与权限管理
    • MySQL的权限管理
    • mysqldump
    • mysqladmin
    • Liquibase
    • 表注释与字段注释
    • 编码类型
  • 计算机基础
  • MySQL
2024-01-21
目录

数据的存储

# 10.数据的存储

在讲什么是数据库之前,先讲讲数据库诞生之前的背景,以及使用数据库的好处

‍

‍

# 数据管理技术的产生和发展

数据管理技术主要经历了3个阶段:

  • 人工管理阶段
  • 文件系统阶段
  • 数据库系统阶段

‍

‍

# 人工管理阶段

在20世纪50年代中期之前,计算机主要是用于科学计算。

当时的硬件状况:主要用纸带、卡片、磁带等来存储数据(磁盘还没出现)。

当时的软件状况:没有操作系统,没有专门管理数据的软件,主要依靠人工来管理数据。特点如下:

  • 数据不保存:当时的计算机主要是用来计算,一般不需要长期保存数据,计算完就撤走程序。
  • 数据需要应用程序自己定义和管理(例如定义一个常量)。
  • 数据不共享:多个程序之间数据是不共享的,而是各自定义

‍

‍

# 文件系统阶段

20世纪50年代后期 ~ 20世纪60年代中期

当时的硬件状况:此时已经有了硬盘,磁带等设备

当时的软件状况:操作系统出现了,并且有了专门的文件处理模块,一般称为文件系统。特点:

  • 文件可以长期保存:操作系统可以通过读取磁盘等设备来查询,修改数据
  • 由文件系统来管理数据。文件系统可以将数据组织成相互独立的文件,并且程序可以按文件名来访问文件。

‍

但是,文件系统也有缺点:

  • 共享性差:一般一个文件对应一个程序。当不同程序具有部分相同的数据,也得建立各自的文件,冗余度高。此外,文件是存储在电脑上的,如果不是在同一个网络,共享起来也很麻烦。
  • 数据独立性差:文件是为某一个特定程序使用的,文件内的逻辑结构是针对应用来设计的。如果数据结构改了,程序也得改,耦合度高。
  • 无法应对突发事故:当文件被误删、硬盘出现故障等导致无法读取的时候,可能会造成重要数据丢失,同时数据还可能被他人轻易读取或窃用。
  • 如果数据量比较大(例如双十一,订单量达数百万),那么还得切割文件,用几个文件来存储数据

‍

举个例子:

笔者开发一个商城系统,此时用txt文件来存储数据。那么其他应用能共享这个文件吗?非常不建议!如果多个应用同时要改这个文件呢,非常容易出现冲突,严重的话可能会造成数据丢失。

此外,该txt文件内,存储的数据是有顺序的,例如这是文件的内容,一行就代表一个商品:

商品编号    商品名    商品价格
0001        篮球      2.5
1
2

如果想要读取全部商品数据,要怎么做?

  1. 首先是读取一行数据,然后用空格分隔开所有字段
  2. 用不同的变量分别保存数据,第一个字段是商品编号、第二个是商品名、第三个是商品价格.....
  3. 读取下一行数据,继续第2步.....

‍

‍

‍

如果文件的逻辑结构改变了,例如增加了一个进货日期:

商品编号    商品名    商品价格    进货日期
0001        篮球      2.5         2022-05-20
1
2

那么我们得修改代码,增加一个变量用来保存进货日期,然后增加代码来处理该变量。

这还仅仅是一个文件的情况,如果有多个文件,例如存储了订单信息的txt,存储了商铺信息的txt.... 那么程序和文件的逻辑结构的耦合度太高了,维护成本很高

除了用txt来存储,也有的应用程序是用二进制来操作数据的,用Excel来操作数据的,不同应用程序之间的代码截然不同。

‍

‍

‍

# 数据库系统阶段

在20世纪60年代后期以来,计算机管理应用范围越来越广泛,数据量急剧增长,以文件系统作为数据管理手段已经不能满足应用的需求。

为了解决多用户,多应用共享数据的需求,使数据为尽可能多的应用服务,数据库技术应运而生。

‍

‍

# 什么是数据库

在文件系统阶段,想要读取数据,得结合文件的逻辑结构,自己手动编写代码来存储、查询、修改和删除数据。

而数据库,相当于已经帮我们写好了这些代码。我们只需告诉数据库,要做什么,数据库就会帮我们存储、查询、修改和删除数据。(有点像调用函数,由函数帮我们完成数据的操作,我们只需传参即可)

00029

‍

# SQL

至于我们如何告诉数据库要做什么?计算机是听不懂人话的,得用一套专门的语言:SQL(Structured Query Language)。

那么在数据库中,是如何存储数据的?在逻辑上,我们可以认为其是用表格来存储数据的(类似Excel表)。一个数据库中可以存储多个表(类似一个Excel表可以由多个sheet页)。

例如这是一个商品表product,存储了商品的信息:

商品编号 商品名称 商品种类 销售单价 进货单价 登记日期
0001 T 恤衫 衣服 1000 500 2009-9-20
0002 打孔器 办公用品 500 320 2009-9-11
0003 运动 T 恤 衣服 4000 2800
0004 菜刀 厨房用具 3000 2800 2009-9-20
0005 高压锅 厨房用具 6800 5000 2009-1-15
0006 叉子 厨房用具 500 2009-9-20
0007 擦菜板 厨房用具 880 790 2008-4-28
0008 圆珠笔 办公用品 100 2009-11-11

在物理上,存储的数据最终还是以文件的方式,存储在磁盘上的。

‍

‍

那么如何操作数据呢?比如想要查询所有商品的编号,类似的SQL如下:

select 商品编号  from product;
1

select:选择的意思,可以理解为选择某一列的数据。

from:来自哪里的意思,在本SQL中的作用是告知数据库,要查询的数据来自哪个表。

该SQL的意思:从product表,选择商品编号列的数据。

‍

除了select外,还有insert关键字用来插入数据,delete关键字来删除数据。这就是SQL,也是我们后续学习的重点。

‍

# 多程序共享

由于所有的数据都是通过表来存储数据的,因此可以很好的解决数据独立性差的问题,任何应用都能通过读取表格的方式来操作数据(而不是有的读取txt,有的读取二进制文件,各自为政)。

并且目前有多种数据库备份机制,可以应对硬盘出现故障等突发事故。

‍

‍

# 通过网络来访问数据库

数据库通常是采用了C/S结构(客户端 /服务器)。例如可以将数据库装在一个云服务器上,每个客户端都可以连接数据库并操作数据,这样就很好的解决了数据共享的问题。

‍

‍

# 学习数据库的必要性

几乎所有的软件、App 都需要使用数据库,多学点总没错

‍

‍

# 小结

本文简单讲解了下数据库诞生的背景,以及数据库的基本概念,下一篇就边实战边讲解。

‍

# 相关文章

  • 最通俗易懂的理解什么是数据库 (opens new window)
上次更新: 2024/5/30 15:25:05
教程概述
数据库的安装

← 教程概述 数据库的安装→

Theme by Vdoing | Copyright © 2022-2024 | 粤 ICP 备 2022067627 号-1 | 粤公网安备 44011302003646 号 | 点击查看十年之约
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式