一、数据库概述
程序 = 指令 + 数据 = 算法 + 数据结构
那数据存放在哪呢?
程序中
文件中
数据库中
1、数据处理技术的发展
数据处理技术的发展经历了三种方式,即程序管理方式、文件系统方式和数据库系统方式。
程序管理方式
程序管理方式是将数据存放在由程序定义的内存变量中
该方式有如下三个缺点:
数据不能保存
数据不能独立于程序
数据不能共享
文件系统管理方式
文件系统方式是将数据存放在数据文件中,数据文件可独立于应用程序。用户在程序中用文件操作语句对数据文件进行存取操作。数据可保存、可共享,但对数据文件处理需编写程序才能实现,且数据的安全性、一致性、完整性得不到保证。
文本系统管理方式的缺陷:
数据冗余和不一致
冗余:指数据重复
不一致:数据的结构、形式不一样
数据访问困难
需要扫描全文,数据量大时开销太大
数据孤立
数据间很难建立联系
完整性问题
数据状态改变前后,总状态要一致
原子性问题
多个操作看成一个操作,要么同时完成,要么同时不完成
并发访问问题
文件被访问时会加锁,其它用户就不能访问了
安全性问题
只允许访问部分信息如何解决
数据库管理系统
数据库管理系统用专门软件对数据文件进行操作,不用编程就可实现对数据文件的处理,使操作更方便、更安全,并能保证数据的完整性、一致性。且能控制对数据文件的并发操作。
二、DBMS
DBMS:DataBase Management System 数据库管理系统
1、DBMS的功能
数据管理独立性;
有效地完成数据存取
数据完整性和安全性
数据集中管理
并发存储与故障恢复
减少应用程序开发周期
2、DBMS分为3层
用户层|视图层
将数据展示给用户的形式(格式)
逻辑层
完成用户层到视图层转换
物理层
将数据保存在磁盘中的形式(格式)
3、DBMS有两类接口
API
SQL接口
4、数据模型
层次模型
多个层级,倒置树状结构,同级上很难建立关联关系
网状模型
异常复杂
关系模型
二维关系表
非关系型数据库模型:NOSQL Not Only SQL
三、RDBMS
1、RDBMS的基本概念
RDBMS:relational database management system 关系型数据库管理系统
关系型数据库,是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。现实世界中的各种实体以及实体之间的各种联系均用关系模型来表示。
关系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。现如今虽然对此模型有一些批评意见,但它还是数据存储的传统标准。
标准数据查询语言SQL就是一种基于关系数据库的语言,这种语言执行对关系数据库中数据的检索和操作。
关系模型由关系数据结构、关系操作集合、关系完整性约束三部分组成。
数据表( Table )
描述事物的数据组织成的二维表称为数据表。
数据在数据库中使用表格的形式的保存
使用SQL语句从表中获取数据:SELECT * FROM tablename;
记录( Record )
数据表中每一行数据称为一个记录,一般情况下表中每行记录的内容应该不同。
每一行为一个实体,行可以为空,空时为空表
字段( Field )
数据表中每一列称为字段,当某个字段值在表中具有惟一性时,称此字段为主键( Primary Key ),主键可以用来惟一的标识一个记录。
列用来描述实体的属性,列不能为空
索引:索引是对数据库表中一列或多列的值进行排序的一种结构,使用索引可快速访问数据库表中的特定信息。
是基于搜索键(查找条件)构建的独特数据结构
索引和数据是存放在一起
可以有多级索引:根索引、二级索引、...
索引根据索引文件是否和数据文件放在一起分为:聚集(簇)索引(InnoDB)和分离索引(MyISM)
2、事务
事务:一次多次操作的组合;把多个操作当作一个操作,要么都同时执行,要么都同时不执行
需要满足ACID测试
ACID,指数据库事务正确执行的四个基本要素的缩写。包含:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。一个支持事务(Transaction)的数据库,必需要具有这四种,否则在事务过程(Transaction processing)当中无法保证数据的正确性,交易过程极可能达不到交易方的要求。
A:原子性
C:一致性
I:隔离性
隔离级别:
read uncommitted 读未提交
read commited 读提交
repeatable read 可重读;mysql的默认事务隔离级别
serializable 串行化
D:持久性
事务有两种状态:
提交:提交后就持久(保存在数据文件中)
未提交:可以提交,也可以回滚
3、RDBMS设计范式
第一范式:原子性,不可分拆
第二范式:主键
第三范式:非主属性不允许重复
4、SQL
SQL:Struct Query Language 结构化查询语言,是一个命令\编程接口
SQL是一个ANSI标准计算机语言,设计用来访问、操作数据库系统。几乎所有现今的关系型数据库软件(mysql,Oracle、MS SQL Server、MS Access、DB2、Sybase、informix等等)都使用SQL进行查询,管理及常用操作。包括一些非关系型数据库也使用SQL。
SQL版本:
SQL存在很多不同版本的SQL语言,但是为了与ANSI标准相兼容,它们必须以相似的方式共同地来支持一些的关键词(比如SELECT,UPDATE,DELETE,INSERT,WHERE等等)。除了SQL标准之外,大部分SQL数据库程序都拥有它们自己的私有扩展。
DDL:Data Defination 数据定义语言 #定义数据库结构。对数据库本身进行操作,修改
CREATE:在数据库中创建对象
ALTER:修改数据库结构
DROP:删除对象
RENAME:重命名对象
DML:Data Manipulation 数据操作语言 #操作数据库内容(数据)
SELECT:(查询)从数据库中获取数据
INSERT:向一个表格中插入数据
UPDATE:更新一个表格中的已有数据
DELETE:删除表格中的数据
DCL:Data Control 数据控制语言 #控制用户权限
GRANT:赋予一个用户对数据库或数据表等格指定权限
REVOKE:删除一个用户对数据库或数据表格等的指定权限
TCL Transaction Control 事务控制
COMMIT 保存数据操作
SAVEPOINT 保存点
ODBC:Open DataBase Connectivity 开放数据库互联 #比较底层
SQL标准:SQL-86,SQL-89,SQL-99,SQL-2003
5、关系型数据库的内部结构
查询引擎就相当于解释器,
mysql写入数据时,并不是直接写入到库文件中,而是先写到事务日志(记录详细,可重放)文件中(顺序IO:连续的存储空间,速度快);过一段时间后,事务日志会同步到数据文件中
6、DBA的工作内容
开发:
数据库设计
代码设计:存储过程、存储函数、触发器
管理:
数据库软件安装及升级
配置优化
连接管理及优化
备份及还原
数据库设计(参与非主导)
基本语句优化
用户及权限管理
安全管理
数据库服务器架构设计
三、关系型数据库的实现
Sybase,Informix,Oracle (早期的RDBMS三巨头)
Sybase --> Microsoft(合作):SQL Server
Informix --> IBM(收购)
开源:
MySQL--> MariaDB
MyISAM:无事务
InnoDB:事务型;5.5版本之后默认的存储引擎为InnoDB,
sqlite 简单的关系型数据库引擎,不支持跨主机通信;常用于嵌入式
egresql --> PostgreSQL(pgsql) --> EnterpriseDB(收费)
LAMP:Linux Apache MySql/MariaDB Php/Perl/Python