数据库概述

目录

前言

一、数据库基本概念

二、数据库发展史

20世纪60年代:萌芽阶段

70年代:关系型数据库兴起

80年代:商业化与标准化

90年代:对象与多维扩展

21世纪初:互联网与分布式革命

2010s至今:云与智能化

关键里程碑

三、什么是关系数据库和非关系数据库

关系型数据库

非关系型数据库

总结对比

四、mysql数据库安装

[1. 安装依赖](#1. 安装依赖)

[2. 创建管理用户](#2. 创建管理用户)

[3. 解压源码与依赖库](#3. 解压源码与依赖库)

[4. 编译配置(CMake)](#4. 编译配置(CMake))

[5. 编译与安装](#5. 编译与安装)

[6. 权限管理](#6. 权限管理)

[7. 配置文件修改](#7. 配置文件修改)

[8. 环境变量配置](#8. 环境变量配置)

[9. 初始化数据库](#9. 初始化数据库)

[10. 启动 MySQL](#10. 启动 MySQL)

后续步骤

总结


前言

在当今信息时代,数据已成为驱动社会发展的核心要素。数据库作为高效管理和组织数据的核心技术,广泛应用于互联网、金融、教育、医疗等各个领域。其中,MySQL作为一款开源、高性能、易扩展的关系型数据库管理系统(RDBMS),因其稳定性和灵活性成为全球最受欢迎的数据库之一。无论是构建小型网站还是支撑大型企业级应用,掌握MySQL的使用都至关重要。本章将介绍数据库的基本概念,并详细讲解MySQL的安装步骤,为后续深入学习数据库操作与开发奠定基础。

一、数据库基本概念

数据库(Database)是结构化数据集合 的存储系统,用于高效管理、组织和访问数据。其核心价值在于提供持久化存储数据共享能力,支撑各类应用系统的运行。

  1. 数据模型

    • 关系模型:数据以二维表 形式组织,表间通过外键关联
    • 非关系模型:包括文档型(如 JSON)、键值对(Key-Value)、图数据库等

      \\text{关系模型示例:} \\quad \\begin{array}{\|c\|c\|} \\hline \\text{学号} \& \\text{姓名} \\ \\hline S001 \& \\text{张三} \\ \\hline S002 \& \\text{李四} \\ \\hline \\end{array}

  2. 数据库管理系统(DBMS)

    核心组件包括:

    • 存储引擎(数据物理存储)
    • 查询处理器(SQL 解析与优化)
    • 事务管理器(保证 ACID 特性)

二、数据库发展史

20世纪60年代:萌芽阶段

早期数据管理主要依赖文件系统,如磁带和卡片存储。1963年通用电气开发的**集成数据存储(IDS)**成为首个数据库管理系统(DBMS),奠定了网状数据库模型的基础。1969年,CODASYL组织正式定义了网状数据库标准。

70年代:关系型数据库兴起

1970年,IBM研究员埃德加·科德 发表论文提出关系模型 ,用二维表结构组织数据。1974年,System R 项目首次实现关系数据库原型,并发明了SQL 查询语言。1977年,Oracle推出首个商用关系数据库。

80年代:商业化与标准化

1983年,IBM DB2 发布,支持大型机环境。1986年,SQL 成为ANSI标准,推动跨平台兼容性。此时期联机事务处理(OLTP)需求催生了高并发技术,如锁机制事务管理(ACID特性)

90年代:对象与多维扩展

对象数据库(如ObjectStore )尝试融合面向对象编程,但因复杂性未成主流。1991年,联机分析处理(OLAP)概念提出,推动数据仓库 (如Teradata)发展。90年代末,MySQL (1995)、PostgreSQL(1996)等开源数据库兴起。

21世纪初:互联网与分布式革命

2000年后,Web应用爆发式增长暴露传统数据库扩展瓶颈。2004年谷歌发布BigTable 论文,引领NoSQL运动:

  • 键值存储 :如Redis(2009)
  • 文档数据库 :如MongoDB(2009)
  • 列式数据库 :如Cassandra(2008)

同时,NewSQL(如Google Spanner,2012)尝试兼顾分布式与ACID特性。

2010s至今:云与智能化

云服务商推出托管数据库(如AWS RDS ,2009),实现弹性伸缩。2017年后,多模型数据库 (如FaunaDB )支持混合数据处理。AI驱动的数据库 (如Oracle Autonomous Database)实现自动优化与运维。

\\text{发展脉络} = \\text{集中式} \\rightarrow \\text{分布式} \\rightarrow \\text{智能化}

关键里程碑
年代 技术突破
1960s 网状数据库
1970s 关系模型、SQL
1990s OLAP、开源数据库
2000s NoSQL、分布式
2010s 云原生、AI集成

数据库技术演进始终围绕数据规模处理效率应用场景三大核心需求持续创新。

三、什么是关系数据库和非关系数据库

关系型数据库

  1. 核心概念: 基于关系模型 。数据存储在 中。每张表由 组成。
    • :代表一条记录。
    • :代表该记录的某个属性(字段)。
  2. 模式固定: 需要预先定义数据的结构(表结构、字段类型、约束等),结构相对固定。
  3. 关系: 表与表之间可以通过主键外键建立关系,实现数据的关联查询。这是其核心优势之一。
  4. 查询语言: 使用结构化查询语言。这是标准化的语言,功能强大,特别擅长处理复杂的关系型查询(如多表连接)。
  5. 事务特性: 通常严格遵循ACID特性,保证数据操作的原子性、一致性、隔离性和持久性。这在高一致性要求的场景(如金融交易)中至关重要。
  6. 典型代表:
  7. 适用场景: 需要复杂查询、强一致性、事务支持、结构化数据的场景。例如:ERP系统、财务系统、传统业务应用等。

非关系型数据库

  1. 核心概念: 泛指不基于传统关系模型的数据库。设计目标通常是解决关系型数据库在某些场景下的不足(如灵活性、扩展性、性能)。
  2. 模式灵活: 数据结构通常不固定或非常灵活(Schema-lessSchema-flexible)。可以轻松添加新字段或改变数据结构。
  3. 存储形式多样: 数据存储形式多种多样:
    • 键值对:像一个大字典。
    • 文档:存储类似JSON或XML的结构化文档。
    • 列族:按列存储数据。
    • :存储节点和关系。
  4. 关系处理: 通常不擅长处理复杂的多表关联查询。它们更倾向于将相关数据聚合存储在一起(如在一个文档中)。
  5. 查询语言: 没有统一的标准查询语言。查询方式通常依赖于特定的数据库类型和API,可能不如SQL通用和强大。
  6. 事务特性: 对ACID的支持程度不一。很多非关系型数据库为了追求高性能和高可用性,采用BASE原则,提供最终一致性而非强一致性。
  7. 扩展性: 通常在水平扩展(通过增加服务器节点)方面有优势,更适合处理海量数据和高并发访问。
  8. 典型代表:
    • 键值:Redis, Memcached, DynamoDB
    • 文档:MongoDB, Couchbase
    • 列族:Cassandra, HBase
    • 图:Neo4j
  9. 适用场景: 需要高并发读写、海量数据存储、灵活的数据结构、易于水平扩展的场景。例如:内容管理系统、实时分析、物联网、社交网络、缓存层等。

总结对比

特性 关系型数据库 非关系型数据库
数据模型 表结构(行和列) 多样(键值、文档、列族、图等)
模式 固定,需预定义 灵活,可动态变化
查询语言 SQL 数据库特定API或查询语言
扩展性 通常垂直扩展(升级单机性能) 通常水平扩展(增加机器节点)
事务 强ACID支持 对ACID支持程度不一,常用BASE
关系处理 强项(通过主键/外键关联) 弱项(更倾向于数据聚合)
典型场景 强一致性、复杂查询、事务型应用 高并发、大数据量、灵活结构、扩展性

简单来说,关系型数据库像结构严谨的表格,适合处理有严格关系和需要精确性的数据;非关系型数据库则像更自由灵活的储物柜或仓库,适合处理大量、快速变化或结构多样的数据。选择哪种取决于具体的应用需求。

四、mysql数据库安装

1. 安装依赖

bash 复制代码
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
 

2. 创建管理用户

bash 复制代码
useradd -s /sbin/nologin mysql
 

3. 解压源码与依赖库

bash 复制代码
tar zxvf mysql-5.7.17.tar.gz -C /opt
tar zxvf boost_1_59_0.tar.gz -C /usr/local/
mv /usr/local/boost_1_59_0 /usr/local/boost
 

4. 编译配置(CMake)

进入源码目录并执行配置:

bash 复制代码
cd /opt/mysql-5.7.17/
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=/usr/local/boost \
-DWITH_SYSTEMD=1
 

注意

若 CMake 报错,需删除 CMakeCache.txt 后重新配置。

5. 编译与安装

bash 复制代码
make -j 4 && make install
 

6. 权限管理

bash 复制代码
chown -R mysql:mysql /usr/local/mysql/
chown mysql:mysql /etc/my.cnf
 

7. 配置文件修改

编辑 /etc/my.cnf

ini 复制代码
[client]
port = 3306
socket=/usr/local/mysql/mysql.sock

[mysql]
port = 3306
default-character-set=utf8
socket=/usr/local/mysql/mysql.sock
auto-rehash

[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
 

8. 环境变量配置

bash 复制代码
echo "PATH=\$PATH:/usr/local/mysql/bin" >> /etc/profile
source /etc/profile
 

9. 初始化数据库

bash 复制代码
cd /usr/local/mysql/bin/
./mysqld \
--initialize-insecure \
--user=mysql \
--basedir=/usr/local/mysql \
--datadir=/usr/local/mysql/data
 

说明
--initialize-insecure 会生成空密码的 root 账户,需后续手动设置密码。


10. 启动 MySQL

bash 复制代码
cd /usr/local/mysql/bin/
./mysqld_safe --user=mysql &
 

后续步骤

  1. 登录 MySQL:

    bash 复制代码
    mysql -u root -p  # 直接回车(密码为空)
     
  2. 修改 root 密码:

    sql 复制代码
    ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
     

总结

本章系统性地介绍了数据库的基本概念,包括数据模型、关系型数据库的特点以及SQL语言的核心作用。通过实践操作,我们完成了MySQL在不同操作系统环境下的安装流程,涵盖了从下载安装包、配置系统环境到验证安装成功的完整步骤。安装过程中需特别注意权限配置与初始安全设置,这是保障数据库稳定运行的关键。成功安装MySQL后,我们已具备利用SQL语句进行数据管理的基础环境。后续章节将进一步深入数据库设计原理、SQL语法实践及性能优化策略,逐步提升数据管理与应用开发能力。

相关推荐
6***94151 小时前
Win10下安装 Redis
数据库·redis·缓存
n***78681 小时前
离线安装 Nginx
运维·数据库·nginx
h***34631 小时前
【玩转全栈】----Django模板语法、请求与响应
数据库·python·django
creator_Li1 小时前
手写Redis系列:二、简单动态字符串SDS
数据库·redis·mybatis
q***73551 小时前
三分钟内快速完成MySQL到达梦数据库的迁移
数据库·mysql
卿雪1 小时前
MySQL【基础】篇:什么是MySQL、主键和外键、三大范式、DDL、DML、DDL、DCL...
java·服务器·开发语言·数据库·后端·mysql·golang
古城小栈1 小时前
Spring Bean初始化三种常用方式(详细易懂版)
java·数据库·spring
2401_837088501 小时前
Redis List 的消息队列
数据库·redis·缓存