目录
一、数据库的介绍
1.数据库的定义
数据库(Database)是一个结构化的数据集合,通常由数据库管理系统(DBMS)进行管理。DBMS提供了创建、读取、更新和删除(CRUD)数据的机制,并支持数据的完整性、安全性和并发访问控制
2.数据库的基本概念
2.1数据
(1)描述事物的符号记录称为数据(Data)。
数字:123、99.99等
文字:单词、句子、段落等
图形:图标、图标等
图像:照片、会话等
声音:录音、音乐等
档案记录:电子表格、文档等
(2)数据是以"记录"的形式按照统一的格式进行存储的,而不是杂乱无章的
统一格式:日期使用相同的格式(YYYY-MM-DD)等
分类存储:在一个学生信息系统中,所有关于学生的记录(如姓名、学号、课程)被存储在学生表中,而所有的课程信息(如课程编号、课程名称)被存储在课程表中
数据结构:在数据库中,数据通常以表格(表)的形式存储,表由多个行和列组成
行:表示一条记录,每行包含一个实体的完整信息
列:表示记录的属性或字段,如学生表中的姓名、学号等
2.2表
表以行和列的形式呈现
行(Row)
定义:行也称为记录或元组,表示表中的一条完整的实体信息。例如,在一个学生表中,每一行可能包含一个学生的所有信息,如姓名、学号、出生日期等
功能:每一行代表表中的一个独立实体或对象,每一行的所有字段一起描述这个实体的详细信
列(Column)
定义:列也称为字段或属性,表示表中数据的一个特定方面或特征。例如,在学生表中,列可能
包括"姓名"、"学号"、"出生日期"等
功能:列定义了每一行数据的结构和数据类型。每列的数据都是相同类型的,如文本、数字或日期
表的特点
数据共享:表可以被多个用户共享,支持数据的集中管理和访问
最小冗余度:表结构通过设计和规范化减少数据余,避免数据重复存储
数据独立性:表提供了较高的数据独立性,即数据的逻辑结构与物理存储结构分离。用户可以在不影响数据存储方式的情况下查询和操作数据
2.3数据库
数据库(Database)是一个系统化的、结构化的数据集合,其中的数据按一定的组织方式存储,以便于高效的检索、管理和操作。这些数据通过各种关联性和结构化的方式进行存储和管理,以满足应用程序和用户的需求
3.数据库管理系统
3.1数据库的建立和维护功能
数据库结构建立:
创建数据库的基本结构,包括定义表、视图、索引等数据库对象
数据录入与转换:将数据导入到数据库中,并将数据从一种格式转换为另一种格式
数据库转储与恢复:备份数据库内容以防数据丢失,并在需要时恢复数据库的状态
数据库重组与性能监视:优化数据库结构以提高性能,包括数据重组、碎片整理和性能监控
3.2数据定义功能
全局数据结构定义:
定义数据库中所有数据的总体结构,包括表的设计、字段类型和约束条件
局部逻辑数据结构定义:定义每个应用程序或用户视图所使用的数据结构,可能与全局数据结构有所不同
存储结构定义:定义数据在物理存储介质上的存储方式和组织
保密模式及信息格式:定义数据的保密级别、加密方式以及数据的展示格式,确保数据安全和隐私保护
数据有效性和完整性:确保数据符合预定义的规则和约束条件,防止错误或不一致的数据输入
3.3数据操纵功能
数据查询:
允许用户检索数据库中的数据,使用 SQL 查询语言来执行复杂的搜索和过滤操作
数据统计:生成数据的统计信息,如汇总统计、平均值、最大值和最小值
数据更新:支持对数据库中的数据进行修改、插入和删除操作,确保数据的最新性和准确性
3.4数据库的运行管理功能
并发控制:
管理多个用户或应用程序对数据库的并发访问,确保数据一致性和防止冲突
存取控制:控制用户对数据库的访问权限,包括读写权限和操作权限,确保数据的安全性
内部维护:包括数据库的维护操作,如数据备份、恢复、重组以及日志记录,以确保系统的稳定性和可靠性
3.5通信功能
与其他软件系统的集成:
DBMS 可以与其他软件系统进行数据交换和集成。例如,Microsoft Access 可以与其他 Office 组件(如 Excel、Word)进行数据交互
接口支持:DBMS 提供标准接口(如 ODBC、JDBC)用于与不同的应用程序和系统进行通信
4.数据库管理系统(DBMS)的工作模式
1. 接受应用程序的数据请求和处理请求
步骤描述:
DBMS 接受来自应用程序或用户的数据请求。这些请求通常以高级指令(如 SQL 查询)形式发出,要求对数据库进行操作(如检索数据、更新记录等)
作用:此步骤确保 DBMS 能够接收和识别来自不同用户或应用程序的请求,并准备好处理这些请求
2. 将用户的数据请求(高级指令)转换为复杂机器代码(底层指令)
步骤描述:
DBMS 将用户的高级查询指令(如 SQL 查询)转换为低级的机器代码或执行计划。这个过程包括解析、优化和生成执行计划:
解析:对 SQL 查询进行语法分析,检查查询的合法性
优化:生成最优的执行计划,以提高查询效率。例如,通过选择合适的索引来加速查询
生成执行计划:将优化后的查询转换为数据库引擎能够理解的执行步骤
3. 实现对数据库的操作
步骤描述:
DBMS 执行生成的底层指令或执行计划,实际操作数据库。操作包括数据的检索、插入、更新和删除等
作用:通过这些操作,DBMS 访问数据库文件、索引和其他数据结构,以执行请求的操作
4. 从数据库的操作中接受查询结果
步骤描述:
在完成数据库操作后,DBMS 从数据库中获取操作结果。这可能包括查询结果数据、更新操作的确认等
作用:此步骤确保 DBMS 能够从数据库中提取操作结果,并准备返回给用户或应用程序
5. 对查询结果进行处理(格式转换)
步骤描述:
DBMS 处理查询结果,通常包括格式转换和数据整理,以使结果符合用户或应用程序的要求。例如,将查询结果格式化为表格形式,或者将数据转换为特定的输出格式(如 JSON、XML)
作用:通过数据处理和格式转换,DBMS 确保查询结果能够被有效地理解和使用
6. 将处理结果返回给用户
步骤描述:
DBMS 将处理后的查询结果返回给用户或应用程序。这个结果可能会显示在用户界面中,或者用于进一步的数据处理和分析
作用:此步骤完成了请求的整个处理流程,将最终结果传递给请求方,使用户能够查看和利用查询结果
总结
接受请求:从应用程序或用户接收数据请求
转换指令:将高级指令转换为底层机器代码或执行计划
执行操作:实际操作数据库,进行数据的检索、更新等
获取结果:从数据库中获取操作结果
处理结果:对结果进行格式转换和整理
返回结果:将处理后的结果返回给用户或应用程序
二、数据库的发展历程
1.层次型和网状型数据库
层次型数据库
定义:层次型数据库使用树状结构来组织数据,数据以父子关系的形式存储。每个父节点可以有多个子节点,但每个子节点只有一个父节点
代表产品:IBM 的 IMS(Information Management System),是最早的层次型数据库管理系统之一
特点:数据模型:采用层次模型(类似于树形结构),数据的存取依赖于层次关系
优点:结构简单,适用于具有固定层次结构的数据
缺点:灵活性差,无法有效处理复杂的多对多关系
网状型数据库
定义:网状型数据库允许数据在多个层次间建立多对多的关系,数据的组织形式类似于图结构
代表产品:IDMS(Integrated Data Management System)是一个常见的网状型数据库
特点:数据模型:采用网状模型,数据通过多对多的关系连接,形成复杂的图形结构
优点:支持复杂的关系,灵活性较高
缺点:复杂性高,数据库设计和维护较为困难
2.关系型数据库
关系型数据库
定义:
关系型数据库采用表格结构来存储数据,每个表格(关系)由行(记录)和列(字段)组成。数据通过主键和外键来建立关系
关键人物:E. F. Codd,IBM 的研究员,于 1970 年提出了关系模型,并提出了关系数据库的理论基础
代表产品:System R:IBM 的一个实验性关系型数据库系统,验证了关系模型的实际应用
Ingres:由加州大学伯克利分校开发的另一个重要关系型数据库系统
特点:数据模型:使用表格(关系)模型,数据通过 SQL(结构化查询语言)进行操作
优点:数据结构化、标准化,易于查询和维护,具有数据完整性和事务处理功能
缺点:处理大规模数据和复杂查询时性能可能较差
3.第三代数据库
第三代数据库
定义:
第三代数据库系统(也称为现代数据库系统)结合了多种先进的数据模型和技术,旨在提供更丰富的数据管理功能和支持新的应用需求
特点:面向对象:支持面向对象编程(OODBMS),数据和程序逻辑封装在对象中
开放性:具有开放标准,支持跨平台操作和集成
新型数据模型:包括文档型、图型、列族型等 NoSQL 数据库,适用于非结构化或半结构化数据
强大的数据管理功能:包括大数据处理、分布式数据库、多模态数据库等
示例:面向对象数据库:如 ObjectDB、db4o
NoSQL 数据库:如 MongoDB(文档型)、Neo4j(图型)、Cassandra(列族型)
4.数据库管理技术的三个阶段
4.1人工管理
定义:
在计算机数据库系统出现之前,数据由人工进行管理。数据以纸质文件或简单的记录形式存在,人工进行数据的存储、检索和管理
特点:管理效率低,容易出错,数据处理和分析能力有限
4.2文件管理
定义:
使用计算机文件系统来管理数据,数据存储在磁盘文件中,通常使用简单的文件操作(如读写文件)来管理数据
特点:比人工管理更高效,但缺乏系统化的数据管理功能,如数据一致性、完整性检查和事务管理
4.3数据库系统
定义:
引入数据库管理系统(DBMS),提供系统化的数据管理、查询和操作功能
特点:支持数据的结构化存储、完整性约束、事务管理、并发控制和备份恢复,显著提高了数据管理的效率和可靠性
4.4总结
层次型和网状型数据库: 早期的数据库模型,适用于固定结构和复杂关系数据的管理
关系型数据库: 目前最广泛使用的数据库类型,提供结构化的数据存储和查询功能
**第三代数据库:**涵盖了现代数据库技术,包括面向对象、NoSQL 和分布式数据库,支持更多样化的数据管理需求
三、关系型数据库和非关系型数据库
1.关系型数据库(RDBMS)
- 数据模型
结构化数据:
数据存储在表格中,表格由行和列组成。每个表格代表一个实体,每行代表一个记录,每列代表一个属性
关系:表格之间通过外键建立关系,支持一对一、一对多和多对多的关系
- 查询语言
SQL:
使用结构化查询语言(SQL)来定义和操作数据。SQL 提供了丰富的查询和操作功能,如 `SELECT`、`INSERT`、`UPDATE`、`DELETE`
- 数据完整性
完整性约束:
支持数据完整性约束,如主键、外键、唯一性、检查约束等,确保数据的一致性和准确性
- 事务管理
ACID 属性:
确保事务的原子性、一致性、隔离性和持久性,处理并发事务时保持数据的一致性和可靠性
- 扩展性
水平扩展:
通常不容易水平扩展(横向扩展),主要通过垂直扩展(提升硬件配置)来提高性能
- 示例
MySQL、PostgreSQL、Oracle Database、Microsoft SQL Server
2.非关系型数据库(NoSQL)
- 数据模型
多样化数据模型:
支持多种数据模型,包括键值对、文档、列族和图形。每种模型适用于不同的数据存储和查询需求
键值存储:以键值对的形式存储数据,如 Redis、Memcached
文档存储:以文档格式存储数据,如 MongoDB
列族存储:以列族的形式存储数据,如 HBase
图数据库:用于存储和查询图形数据,如 Neo4j
- 查询语言
查询方式:
通常不使用 SQL。查询和操作方式依赖于具体的数据库类型和实现。支持灵活的数据查询和操作方法
- 数据完整性
灵活性:
数据模型通常较为灵活,完整性约束较少。适用于对数据结构要求不严格的应用场景
- 事务管理
BASE 属性:
通常遵循基本可用性、软状态和最终一致性原则,处理高并发场景下的数据一致性问题
- 扩展性
水平扩展:
设计上支持水平扩展(横向扩展),可以通过添加更多的服务器来处理更大规模的数据和更高的并发请求
- 示例
键值存储:Redis、Memcached
文档存储:MongoDB、CouchDB
列族存储:HBase、Apache Cassandra
图数据库:Neo4j、ArangoDB
3.关系型和非关系型数据库的区别
|-------|-----------------------|-----------------------|
| 特性 | 关系型数据库(RDBMS) | 非关系型数据库(NoSQL) |
| 数据模型 | 表格(行和列)、关系 | 多样化(键值对、文档、列族、图形) |
| 查询语言 | SQL | 依赖具体数据库类型,不固定 |
| 数据完整性 | 强数据完整性约束(ACID) | 灵活,完整性约束较少(BASE) |
| 事务管理 | ACID(原子性、一致性、隔离性、持久性) | BASE(基本可用性、软状态、最终一致性) |
| 扩展性 | 主要是垂直扩展(提升硬件) | 支持水平扩展(添加更多服务器) |
| 应用场景 | 结构化数据、复杂查询和事务处理 | 海量数据、灵活的数据模型、高并发访问 |
选择建议
关系型数据库:
适用于数据结构固定、关系明确的场景,如金融、电子商务和业务应用,需要强数据一致性和复杂查询功能
非关系型数据库:适用于处理大规模、非结构化或半结构化数据的场景,如社交网络、大数据分析和实时数据处理,需要高扩展性和灵活的数据模型
四、MySQL数据库
1.概述
MySQL 是一种广泛使用的开源关系型数据库管理系统(RDBMS)。它以其高性能、稳定性和灵活性广受欢迎,广泛应用于各种应用场景,包括网页应用、企业系统、数据分析等
2.数据库的安装
2.1安装环境依赖包
yum -y install ncurses ncurses-devel bison cmake
2.2上传并解压压缩包
cd /opt
tar zxvf mysql-boost-5.7.20.tar.gz
2.3编译安装
cd /opt/mysql-5.7.20/
cmake \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \
-DSYSCONFDIR=/etc \
-DSYSTEMD_PID_DIR=/usr/local/mysql \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DWITH_BOOST=boost \
-DWITH_SYSTEMD=1
make && make install
2.4修改配置文件
vim /etc/my.cnf
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock
[mysqld]
user = mysql
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
port = 3306
character-set-server=utf8
pid-file = /usr/local/mysql/mysqld.pid
socket=/usr/local/mysql/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
max_connections=2048
default-storage-engine=INNODB
max_allowed_packet=16M
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES
2.5创建运行用户
useradd -M -s /sbin/nologin mysql
2.6更改MySQL安装目录和配置文件的属主属组
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
2.7设置路径环境变量
echo 'export PATH=/usr/local/mysql/bin:/usr/local/mysql/lib:$PATH' >> /etc/profile
source /etc/profile
2.8初始化数据库
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
2.9添加MySQL系统服务
cp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/
systemctl daemon-reload
systemctl start mysqld.service
systemctl enable mysqld
2.10修改MySQL登录密码并远程登录
mysqladmin -u root -p password "123"
mysql -u root -p