为什么需要有数据库?
因为应用程序需要保存用户的数据,比如Word需要把用户文档保存起来,以便下次继续编辑,或者做传输. 没有数据库的话我们可以将其写入csv文件:
id,name,gender,socre
1,小明,M,90
2,小红,F,95
3,小军,M,88
4,小丽,F,88
如果需要保存学校所有班级的信息,就可以写入另一个CSV文件,但是随着应用程序功能越来越复杂,如何管理这些数据就成了问题:
- 读写文件需要大量重复的代码;
- 从巨大的且繁杂的数据中快速查询出自己想要的数据.
及时为了解决上述情况我们实现了复用性很高的代码,但是文件的读写速度慢和繁大的工作量是无法避免的.
这个时候数据库作为一种 专门的数据管理软件就应运而生了,应用程序不需要自己管理数据,而是通过数据库软件提供的接口来读写数据,至于数据本身如何存储到文件,那是数据库软件的事情,应用程序自己并不关心. 这样一来程序开发人员可以更专注与业务逻辑的开发,而避免将精力浪费在数据的存储读写问题上.
数据库按照数据结构来组织,存储和管理数据,实际上数据库一共有三种模型
- 层次模型
层侧模型就是以"上下级"的层次关系来组织数据的一种方式,层次模型看起来就像一棵树.
- 网状模型
网状模型就是吧按每个数据节点和其他数据节点连接起来,网状模型看起来就像城市的公路网.
- 关系模型
关系模型把数据看做一个二维表格,任何数据都可以通过 行号+列号 来确定,它的数据模型看起来就像一个Excell表格.
随着时间的推移和市场的不断竞争关系型数据库取得了绝对的市场份额,其相比层次模型和网状模型理解和使用都更加简单.
一个班级的学生可以用一个表存储起来.
ID | 姓名 | 班级ID | 性别 | 年龄 |
---|---|---|---|---|
1 | 小明 | 201 | M | 9 |
2 | 小红 | 202 | F | 8 |
3 | 小军 | 202 | M | 8 |
4 | 小白 | 201 | F | 9 |
其中班级ID对应着班级表.
ID | 名称 | 班主任 |
---|---|---|
201 | 二年级一班 | 干老师 |
202 | 二年级二班 | 土老师 |
这样我们通过班级ID就在两个表中建立起了一对多的数据关系.
数据类型
对于一个关系表,除了定义的每一列的名称之外,其数据类型也是十分重要的,关系型数据库支持的标准数据类型包括数值,字符串,时间等:
名称 | 类型 | 说明 |
---|---|---|
INT | 整形 | 4字节,21亿 |
BIGINT | 长整型 | 8字节,922亿亿 |
REAL | 浮点型 | +/-3.4E38 |
DOUBLE | 浮点型 | +/-1.7308 |
DECIMAL(M,N) | 高精度小数 | 表示一共M位数字,其中N位小数 |
CHAR(N) | 定长字符串 | 总是 存储有100个字符的字符串 |
VARCHAR(N) | 变长字符串 | 可以 存储有0~100个字符的字符串 |
BOOLEAN | 布尔类型 | TRUE/FALSE |
DATE | 日期类型 | 9999-12-31 |
TIME | 事件类型 | 12:59:59 |
DATETIME | 时间和日期类型 | 9999:12:31 12:59:59 |
上面的表中列举了最常用的数据类型,很多数据类型还有别名,例如REAL可以写为FLOAT(24).还有一些不常用的数据类型,例如TINYINT(0-255). 各个数据厂商还会支持特定的数据类型,例如JSON.选择数据类型的时候,要根据业务规则选择合适的类型.通常来说,BIGINT能满足整数的存储需求,VARCHAR(N)能,满足字符串存储的需求,这两类使用最为广泛.
主流的关系数据库
- 商用数据库Oracle,SQL Server,DB2等;
- 开源数据库MySQL,PostgreSQL;
- 桌面数据库,以微软的ACCESS为代表,适合桌面和应用程序使用;
- 嵌入式数据库,以Sqlite为代表,适合数据应用和桌面程序.
SQL(Structured Query Language):是结构化查询语言的缩写,用来访问和操作数据库系统.SQL语句既可以查询数据库中的数据,也可以增删改查数据库中的数据,还可以对数据库进行管理和维护操作,不同的数据库,都支持SQL,这样,我们通过学习SQL这一种语言,就可以操作不同的数据库.
虽然SQL已经被ANSI认定为标准,但是不同的数据库对标准的SQL支持不太一致,并且,大部分数据库在标准的SQL上做了扩展.也就是说,如果只是用标准SQL,理论上所有数据库都可以支持,但是如果使用某个数据库扩展的SQL,那么换一个数据库就不能执行了.例如Oracle将自己的SQL成为PL/SQL,Microsoft将自己扩展的SQL成为T-SQL.
所以如果使用标准的SQK语言核心功能那么所有的SQL厂商推出的软件都可以使用.
总而言之,SQL语言定义了如下几种操作数据库的能力:
- DDL:Data Defintiion Language
DDL允许用户定义数据,也就是创建,删除,修改表结构这些操作,通常DDL由管理员执行.
- DML:Data Manipulation Language
DML为用户提供了添加,删除,更新数据库的能力,这个是应用程序对数据库的日常操作.
- DQL:Data Query Language
DQL允许用户查询数据,这也是通常最频繁的数据库日常操作