一、 数据库的出现

1. 数据库是什么: 数据库简单来说,就是存储数据的地方(废话),对于用户认证这个过程来说,当用户登录服务器时, 系统需要把用户的输入的用户认证信息和存储的用户认证信息进行比对,这一过程就需要事先把所有用户的信息存储在一个数据库中,然后逐条进行比对。早起最传统的数据库当然就是文本文档了,每个用户认证时,需要把整个文本文档凑头到尾比对一边,效率极其低下。随着数据爆炸式的增长,以及用户并发访问量的增加,这样的文本数据库逐渐不能满足互联网时代的需要。于是产生了各种各样的其他专门的数据库程序来管理数据。

另外文本数据库拥有几个严重的缺陷:

1) 数据冗余和不一致: 同一个数据可能存放多次

2) 数据访问困难

3) 数据孤立性:大文件拆分后,很难建立联系

4) 数据完整性问题

    5) 原子性问题:保证数据库间交互式,能够同步

    6) 并发访问

    7) 安全性问题:不能只设置部分内容的权限 , 因此来说,把所有数据类操作交给前端程序,太过于粗糙


 2. 数据库软件:

为了更加精细的操作数据的存取,在应用程序和数据之间建立一个中间层,专门用来负载数据存取和管理,就产生了数据库管理系统(DBMS)。

wKiom1V2Xdii98WsAASd1riLgEU812.jpg

数据库管理系统,包含前端API接口与前端应用程序交互,也包含shell命令行接口与程序员直接交互。同时负责完成数据存取。这时,前端程序将不再直接面对数据,而有数据库管理系统代理完成更加精细管理工作。包括权限,以及如何按照比较高效的方式分配数据。

  3. 数据库模型:

        1)层次模型

        2)网状模型

        3)关系模型:1975年又IBM研究院E.F.Coded提出并发表了最开始论述关系型数据库的模型论文,有拉里.克瑞森和其程序员朋友将其实现,后来承接了美国军方一个名叫oracle的项目创建了oracle公司

        4)NoSQL:No only SQL , 很多产品,各有侧重点。 由于海量数据是由分布式存贮, 所以需要CAP测试,NoSQL 产品通常只能满足两个。

                                   CAP测试: Consistent Avilable Partition tolerence 一致性, 可用性,容错性

   4. 开源数据库:sqliteMySQL, PostgreSQL (EnterpriseDB),MariaDB,MySQL

二、 关系型数据库管理器模型

wKiom1V2XiKDCDBJAAIHI4PaYP4695.jpg

1. 存储的文件: 

1) 数据:保存的数据

2) 索引:保存数据的索引文件

3) 事物文件:操作事物文件 

 2. 磁盘空间管理器: 用于管理磁盘上数据的存取,建立索引等工作 

3. 缓冲区管理器: 为了解决频繁I/O的低效,一部分检索结果会存在缓冲区中内存中,缓冲区管理器用于管理存于内存中

4. 存取方法接口管理数据的存取方法,于sql语句作用

5. 事物管理器:当以个存取操作完成后,并不是直接写入数据文件,而且写入事物日志中,如果此时数据库崩溃,数据库存取数据将会存入事务日志中。写入数据库文件为随机I/O,写入日志文件为顺序I/O 所以后者比较快。

事物:满足ACID测试

A:原子性

C: 一致性

       I:隔离性

       D:持久性

6. 锁管理器:当某一数据在被用户访问时,它将不能再被其他用户访问,会被锁管理器锁住。

7. 恢复管理器:存取操作写入事务日志但没写入数据中时,数据库崩溃,在第二次重新启时候,事务日志中内容将通过恢复管理器写入到数据文件中

8. SQL查询引擎:

1). SQL Struct Query Language : 结构化查询语言, 包含以下三类命令

  (1) DCL: Data Control Language: 数据控制语言,主要是授予或取消某些访问权限

GRANT/REVORK

(2) DDL: Data Definition Language:数据定义语言,建立表,创建索引

CTREAT/ALTER/DROP

(3) DML : Data Manipulation Language:数据需改语言

SELECT/INSERT/DELETE/UPDATE

2). SQL查询引擎包含四个部分

(1) 分析器,进行SQL语言的语法分析

(2) 查询计划,对查询对象路径进行优化,有可能统一对象存在多条索引

(3) 优化器, 对于SQL语言查询方式进行优化

(4) 求解器, 管理返回结果等

5) 线程池, 当mysql服务器接收多个并发请求时,分配线程响应多用户

 9.    SQL命令行接口: SQL的客户端程序,使用SQL命令查询SQL服务器

 10. 应用程序命令API:不同编程语言有不同的SQL命令输出接口,可以通过API驱动把SQL语句输送给SQL服务器,本质上也是SQL客户端

11. ODBC: 底层关系型数据库查询标准

12. SQL索语言的标准 ANSI: SQL-86, SQL-89, SQL-92, SQL-99, SQL-2003


三、 mysql 服务器安装和基本使用

1. mysql程序来源: 官方网站 mysql.com

1) vendor 系统自带的rpm包

2) MySQL官方rpm包 : 不建议使用,可能会打破依赖关系

3) 通用二进制格式 : 建议

4) 源码编译 : 建议

2. 使用通用二进制文件安装

wKiom1V2XqyQ9PRrAAQZFIbY5qQ046.jpg

wKioL1V2YMLjGX8vAAQd6TQ5tfo098.jpg

wKiom1V2Xx_B-OjOAAFzQdWq1Ds141.jpg

3. 启动后产生的文件

wKiom1V2aB6isOJxAAGNAY_ZghI558.jpg

  4. 需改管理员密码

wKioL1V2ajTSSSgPAALwSInjdqA809.jpg

5. 删除匿名用户

wKiom1V2aPTQA3JxAAOr4TcQyV0468.jpg

wKioL1V2apjx-392AAM_qlDYsXc752.jpg

7. 导出头文件,库文件和man文档

wKiom1V2aRyhaP4ZAAHd1NnSiPE188.jpg

四、 mysql客户端以及命令的基本使用

1. 配置文件基本个是/etc/my.cnf,服务器配置文件和客户端配置文件写在一起,通常包含三个部分

1) [mysql] :mysql客户端配置部分,只是用来配置mysql自己的客户端

2) [mysqld]:mysql客户端服务器配置段

3) [client]:mysql的所有客户端,包括其他的客户端

  2. mysql客户端用户登录

wKiom1V2aYzCZWO4AACReUHO3PQ758.jpg

3. mysql的命令 :

命令不去分大小写,命令参数区分大小写,与文件相关的区分大小写

 1) 客户端命令 : 在客户端可以自动执行的命令

例如: help, status, quit,不需要语句终止符默认为“;”

使用help可以获取命令帮助符, help KEYWORD

wKioL1V2a6OzHi2mAAQYu7jRR34206.jpg

2) 服务器端命令  

wKioL1V2a-rSkbYlAAE8MIGHLfo662.jpg

3) mysql 命令接收的两种模式

交互式模式: 直接在mysql shell中输入命令

批处理模式: 使用输入重定向,mysql < test.sql 实现

非登录执行命令:mysql -e "sql_command"


五、 mysql 服务器的几个重要概念

1. 约束,constraint : 某一个字段取值的范围

1) 主键约束 : 只要某些字段被定为主键,则填入数据时不能重复,另外不能为NULL 值

2) 外键约束:通过另一张表的取值范围来约束当前表

3) 唯一键约束:与主键相同,但是可以为空 ,主键只能有一个,唯一键只能多个

4) 检查式约束: 用户自定义的取值范围,通常为布尔表达式,符合条件才能填

5) 非空约束 : 不能为空

2. 键(key)

1)主键:能惟一标识表中每一个记录的字段或字段的组合;

2)候选键 : 可以作为主键使用的字段或字段组合,不一定只有一种

3) 唯一键 : 唯一标示,但可以为空,数据不能重复出现

4) 外键
   3. 表创建需要定义

  1)需要定义的内容:字段名, 约束,字段类型

       2)字符类型:

char(#): 不区分大小写

varchar(#):区分大小写

binary(#):不区分大小写

varbinary(#):区分大小写,

text(不区分大小写):存储指针,指向对象

blob(区分大小写): 二进制大对象,只存储指针,指向对象

     3)数值型:

精确数值 :

int:tinyint(1byt), smallint(2byt),mediumint(4byt),int(4byt),bigint(8byt)

decimal :十进制小树

近似值: float, double

日期时间型:date, time, datatime, timestamp

布尔型:

内置类型: ENUM 限定特定的取值范围, SET