引入
我们通常称 Mysql 、Oracle、SQLite之类的为数据库, 其实本质上它们是一个个数据库管理软件
一.数据库管理软件的由来
在学习Mysql之前, 我们的数据想要永久保存,一般都是保存在硬盘中, 硬盘的单位就是文件, 毫无疑问, 一个文件仅仅只能存在于一台机器上, 但是一个程序的所有组件不可能都在一台机器上, 如果都在一台机器上, 那么就会产生许多问题, 下面将介绍会产生的问题以及数据库管理软件的解决方案
1.程序所有组件都运行在一台机器上的问题
- 问题 : 运行程序机器的宕机代表着整个软件的崩溃, 并且程序执行的效率依赖于承载它的硬件, 一台机器的性能是有限的, 受限于目前的硬件水平, 一台机器的性能垂直进行扩展是有极限的
- 解决 : 我们可以通过水平扩展来增强我们系统的整体性能,这就需要我们将程序的各个组件分布于多台机器去执行
2.数据安全性问题
- 问题 : 我们通过将组件放置不同机器解决了上一个问题, 但需知各组件仍然是一个整体, 所有组件的数据还是要共享的, 但每台机器上的组件都只能操作本机的文件, 这就导致了数据必然不一致
- 解决 : 将数据与应用程序分离, 将文件专门放在一台机器上, 然后将多台机器通过网络去访问这台机器上的文件(用socket实现), 即共享这台机器上的文件,共享则意味着竞争, 会发生数据不安全, 需要加锁处理
3.实现并发
- 基于问题 2 的解决我们就需要写出一个socket服务端来存放和管理数据库文件, 然后再写一个socket客户端来访问服务端存放的数据
- 功能实现 : 远程连接(支持并发)、打开文件、读写文件(并且加锁)、关闭文件
4.数据库管理软件诞生
-
针对上面产生的问题以及解决方案, 我们在编写任何程序之前, 都需要事先写好基于网络操作一台主机上文件的程序 (socket服务端与客户端程序)
-
于是有人将此类程序写成一个专门的处理软件,这就是mysql等数据库管理软件的由来
-
但mysql解决的不仅仅是数据共享的问题, 还有查询效率, 安全性等一系列问题, 总之, 把程序员从数据管理中解脱出来, 专注于自己的程序逻辑的编写
二.数据库简述
1.什么是数据
数据(Data), 就是描述事物的符号, 它可以是数字, 也可以是文字、图片、图像、声音、语言等, 数据由多种表现形式,它们都可以经过数字化后存入计算机, 在计算机中描述一个事物, 就需要抽取这一事物的典型特征, 组成一条记录, 就相当于文件里的一行内容
派大星,man,22,1999,美国,IT,17届,斯坦福 # 一条记录
章鱼哥,man,35,1986,美国,餐饮,10届,斯坦福 # 一条记录
单纯的记录没有什么意义, 必须给予说明, 于是我们就可以按逗号作为分隔,依次定义各个字段的意思,相当于定义表的标题
name,sex,age,birth,addr,industry,entrance_time,school # 字段
派大星,man,22,1999,美国,IT,17届,斯坦福 # 一条记录
章鱼哥,man,35,1986,美国,餐饮,10届,斯坦福 # 一条记录
添加字段之后我们就能知道每条记录每个逗号分隔开的都是代表什么意思
2.什么是数据库
数据库(DataBase)简称DB, 它是存放数据的仓库, 只不过这个仓库是在计算机存储设备上, 而且数据是按一定的格式存放的, 过去人们将数据存放在文件柜里, 现在数据量庞大, 已经不再适用, 数据库是长期存放在计算机内、有组织、可共享的数据即可, 数据库中的数据按一定的数据模型组织、描述和储存, 具有较小的冗余度、较高的数据独立性和易扩展性, 并可为各种用户共享
3.什么是数据库管理软件
数据库管理软件(DataBase Management System)简称DBMS
-
在了解了Data与DB的概念后, 如何科学地组织和存储数据, 如何高效获取和维护数据成了关键, 这就用到了一个系统软件---->数据库管理系统, 如MySQL、Oracle、SQLite、Access、MS SQL Server
-
mysql主要用于大型门户, 例如搜狗、新浪等, 它主要的优势就是开放源代码, 因为开放源代码这个数据库是免费的, 他现在是甲骨文公司的产品
-
oracle主要用于银行、铁路、飞机场等, 该数据库功能强大, 软件费用高, 也是甲骨文公司的产品
-
sql server是微软公司的产品, 主要应用于大中型企业, 如联想、方正等
三.数据库的核心概念以及关系
1.数据 : 事物的状态, 可以将其归纳总结出字段信息
2.记录 : 多个字段的信息组成的一条记录, 即文件中的一行内容
3.表 : 一个文件
4.数据库 : 文件夹
5.数据库管理软件 : 即套接字程序, 例 : mysqld <---> mysql
6.数据库服务器 : 运行mysqld(服务端)的一台计算机
四.数据库管理软件分类
由上面的介绍我们已经知道, 数据库管理软件的本质就是一个C/S套接字程序, 一个服务端套接字, 一个客户端套接字, 而数据库管理软件不仅仅只有一种, 他们也有两种分类
1.关系型数据库管理软件
- 简单理解 : 需要有表结构
- 例 : sqllite,db2,oracle,access,sql server,MySQL (sql语句通用)
2.非关系型数据库管理软件
- 简单理解 : 通过key--value的形式存储的, 没有表结构
- 例 : mongodb,redis,memcache