目录
一,数据库简介
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地管理数据。数据库具有以下特点:
- 可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
- 可以有效地保持数据信息的一致性、完整性,降低数据几余。
- 可以满足应用的共享和安全方面的要求。数据库技术是计算机科学的核心技术之一,具有完备的理论基础。对数据库基本概念的掌握,将有助于对数据库的理解。
二,数据库的基本概念
1,数据
描述事物的符号记录称为数据(Data)。数字、文字、图形、图像、声音、档案记录等都是数据。
在数据库中,数据是以“记录”的形式按照统一的格式进行存储的,而不是杂乱无章的。相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数据的存储就能够井然有序。
下列图中存储的一行数据,在数据库中称为一条“记录”每条记录中的每一个输入项称为“列”
编号 | 姓名 | 性别 | 年龄 | 民族 |
1 | 张三 | 男 | 21 | 汉 |
2 | 李四 | 男 | 22 | 汉 |
3 | 王五 | 男 | 23 | 回 |
2,数据库和数据库表
表是用来存储具体数据的,那么数据库和表存在什么关系呢?
简单地说,数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合。例如,关系数据库的表由记录组成,记录由字段组成,字段由字符或数字组成。它可以供各种用户共享,具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。通常,数据库并不是简单地存储这些数据的,还要表示它们之间的关系。例如,书和人是存在联系的,书的作:”。这种关系也需者可能就是某个人,因此需要建立书与人的“关系要用数据库来表示,因此关系的描述也是数据库的一部分。
3,数据库管理系统和数据库系统
数据库管理系统(Database Management System,DBMS)是实现对数据库资源有效组织、管理和存取的系统软件。它在操作系统的支持下,支持用户对数据库的各项操作。DBMS 主要包括以下功能:
- 数据库的建立和维护功能: 包括建立数据库的结构和数据的录入与转换、数据库的 转储与恢复、数据库的重组与性能监视等功能。
- 数据定义功能: 包括定义全局数据结构、局部逻辑数据结构、存储结构、保户密模式 及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以防止不合语 义的错误数据被输入或输出。
- 数据操纵功能: 包括数据查询统计和数据更新两个方面,数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、存取控 制、数据库内部维护等功能。
- 通信功能: DBMS 与其他软件系统之间的通信,如Access 能与其他 Office组件进行 数据交换。
数据库系统:数据库系统(Database System,DBS)是一个人-机系统,一般由硬件、操作系统、数 据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可以通过 DBMS 操作 数据库,也可以通过应用程序操作数据库。应用程序是利用 DBMS 为解决某个具体的管理或数据处理的任务而编制的一系列
命令的 有序集合。如果应用程序比较完善,能够提供友好的人机界面,并编译成可执行文件发行,使得普通用户不需要具备计算机的专业知识,在较短时间就学会使用,那么就称为数据库应 用软件。常用的数据库应用软件有人事管理、财务管理、图书管理等信息管理软件及各类信息咨 询系统等。
数据库管理员(Database Administrator,DBA):负责数据库的更新和备份、数据库系 统的维护、用户管理等工作,保证数据库系统的正常运行。DBA 一般由业务水平较高、资历 较深的人员担任。需要注意的是数据库、数据库系统、数据库管理系统,甚至数据库表等名词,在日常讨 论中通常不严格区别。遇到此情况时,可以根据具体情况,判断出实际所指的是什么。
三,主流数据库介绍
1,SQL server数据库
SQL Server 是微软公司开发的关系型数据库管理系统(RDBMS),是企业级数据管理平台的核心组件之一。主要特点:
- 关系型数据库:基于表格结构存储数据,支持SQL(结构化查询语言)
- 可扩展性:从个人使用到企业级大规模应用都能支持
- 高安全性:提供行级安全、动态数据掩码、透明数据加密等功能
- 商业智能:集成分析服务、报表服务等BI工具
- 云集成:与Azure云服务深度集成
2,Oracle简介
- 高性能与可扩展性:支持超大规模数据处理,适用于高并发环境
- 高可靠性:提供强大的数据保护机制,包括备份恢复、数据卫士等
- 多模型支持:除关系型数据外,还支持 JSON、XML、空间数据等
- 云就绪:全面支持云环境部署 (Oracle Cloud)
- 企业级安全:透明数据加密、数据脱敏、细粒度访问控制
3,DB2简介
IBM DB2 是 IBM 公司开发的一款高性能关系型数据库管理系统(RDBMS),支持多种操作系统,广泛应用于企业级关键业务系统。特点如下:
- 多平台支持:可在 Linux、UNIX、Windows 及 IBM z/OS(大型机)上运行
- 高性能优化:支持高级查询优化、内存计算(BLU Acceleration)
- 高可用性:提供 HADR(高可用性灾难恢复)、日志复制等机制
- 混合数据支持:关系型数据 + JSON、XML、图数据等
- 云原生支持:可在 IBM Cloud、AWS、Azure 等云平台部署
- 企业级安全:数据加密、行/列级访问控制、审计日志
4,mysql简介
MySQL 运行于 Linux 操作系统之上,Apache 和 Nginx 作为 Web 服务器,MySQL 作为后台 数据库,PHP/Perl/Python 作为脚本解释器。这四款软件都是免费或开源的,也就是说,企,业可以不花一分钱(除人工外)就能建立起一个稳定、高速的网站系统,业内称为“LAMP”组合。因此,其以体积小、速度快、开源等特点,霸占了中小型网站相当大的市场。
四,数据库的两大类型
1,关系型数据库
关系型数据库(RDBMS, Relational Database Management System)是基于关系模型的数据库管理系统,使用表(Table)的结构化方式存储和管理数据。
关系数据库使用的存储结构是多个二维表格,在每个二维表中,每一行称为一条记录,用来描述一个对象的信息;每一列称为一个字段,用来描述对象的一个属性。数据表与数据库之间存在相应的关联,这些关联用来查询相关的数据。
关系型数据库以表格形式存储数据,由数据库、表、字段、记录、索引、视图等基本结构组成,
- 数据库:是关系型数据库系统中最高层次的逻辑结构,是一个存储数据的容器,包含了多个相关的表以及其他数据库对象,如视图、存储过程等。可以将其看作是一个大型的仓库,用于存放各种数据。
- 表:是关系型数据库中最基本的数据存储结构,由行和列组成,类似于电子表格。每一行代表一条记录,每一列代表一个特定的属性或字段。例如,一个 “学生” 表可能包含 “学号”“姓名”“年龄” 等列,每一行则对应一个具体的学生信息。
- 字段:也称为列,是表中最小的存储单元,用于存储特定类型的数据。每个字段都有一个名称和数据类型,数据类型决定了该字段可以存储的数据种类,如整数、字符串、日期等。比如 “年龄” 字段通常定义为整数类型,“姓名” 字段定义为字符串类型。
- 记录:也叫行,是表中的一行数据,代表一个完整的实体或对象的信息。一条记录包含了表中各个字段的值,这些值共同描述了一个特定的事物。例如,在 “学生” 表中,一条记录可能包含某个学生的学号、姓名、年龄等具体信息。
- 索引:是一种提高数据库查询效率的数据结构,它类似于书籍的目录,可以帮助数据库快速定位到需要查询的数据。索引可以基于一个或多个字段创建,通过对这些字段进行排序和建立索引结构,使得数据库在查询时能够更快地找到符合条件的数据,而不必全表扫描。
- 视图:是从一个或多个表中导出的虚拟表,它并不实际存储数据,而是根据定义的查询语句动态地从基表中获取数据。视图可以看作是一种对数据进行筛选、组合和呈现的方式,它可以简化复杂的查询操作,为用户提供一种更方便、更安全的数据访问方式。
主键
- 定义:主键是表中的一个或多个字段,用于唯一地标识表中的每一行记录。它就像是表中记录的 “身份证号码”,具有唯一性和非空性约束,即表中的任何两行都不能有相同的主键值,且主键字段不能包含空值。
- 作用
- 唯一标识记录:通过主键可以准确地定位和访问表中的特定记录,方便对数据进行查询、更新和删除操作。例如,在 “学生” 表中,以 “学号” 作为主键,就可以轻松地根据学号找到某个具体学生的信息。
- 保证数据完整性:数据库系统会自动确保主键的唯一性和非空性,防止插入重复或不完整的数据,从而维护了表中数据的完整性和准确性。
外键
- 定义:外键是一个表中的字段,它与另一个表的主键相关联,用于建立两个表之间的关联关系。外键的值必须匹配关联表中主键的现有值,或者为 null。
- 作用
- 建立表间关系:外键是实现关系型数据库中表与表之间关联的关键。通过外键,可以将不同表中的相关数据联系起来,从而能够在多个表之间进行数据的关联查询和操作。例如,有 “学生” 表和 “课程” 表,“学生” 表中的 “专业编号” 是外键,与 “课程” 表中的 “专业编号” 主键相关联,这样就能通过 “专业编号” 知道某个专业的学生可以选修哪些课程。
- 保证参照完整性:外键约束确保了数据在不同表之间的一致性和完整性。当在有外键关联的表中进行数据插入、更新或删除操作时,数据库会检查外键值是否在关联表的主键中存在,以防止出现孤立的数据,即没有关联到其他表中相应记录的数据。
2,非关系型数据库
非关系数据库也被称作 NoSQL(Not 0nly SQL)存储数据不以关系模型为依据,不需要 固定的表格式。非关系型数据库作为关系数据库的一个补充,在日益快速发展的网站时代,发挥着高效率与高性能。
- 处理高并发读写:能够应对大规模的并发读写请求,在处理高并发场景时表现出色,如电商促销活动、社交媒体的实时互动等场景下,能保证系统的稳定性和响应速度。
- 存储非结构化或半结构化数据:可以存储各种类型的非结构化或半结构化数据,如文本、图像、视频、JSON 文档等,无需像关系型数据库那样预先定义严格的表结构,非常适合处理现代应用中复杂多样的数据格式。
- 支持灵活的数据模型:数据模型更加灵活,允许数据的动态变化和扩展。在业务需求不断变化的情况下,无需频繁地修改数据库结构,降低了开发和维护成本。
- 易于横向扩展:可以通过增加服务器节点来轻松实现横向扩展,以处理不断增长的数据量和业务负载。这种扩展性使得非关系型数据库能够适应大规模数据处理和高流量的应用场景。
3,关系型与非关系型数据库的区别
1,数据模型:
- 关系型数据库采用表格形式存储数据,由行和列组成,支持 SQL 语言,通过事务处理和约束实现 ACID 特性,确保数据一致性。
- 非关系型数据库根据不同类型有不同数据模型,如键值对、列存储、文档型和图形等,不依赖固定表格结构,支持高并发读写和水平扩展,更适合处理非结构化或半结构化数据。
2,数据结构:
- 关系型数据库中,数据以二维表形式存储,由行和列构成,表与表之间通过外键关联,结构严谨,适合存储和处理结构化数据。
- 非关系型数据库数据结构更灵活,例如键值存储数据库以键值对存储,列存储数据库按列存储,文档存储数据库以文档形式存储,图形数据库以节点、边和属性的图形结构存储。
3,存储方式:
- 关系型数据库将数据存储在硬盘等持久化存储设备上,以页为单位进行读写,支持事务处理和回滚操作,确保数据一致性,但在处理大规模数据时性能可能受限。
- 非关系型数据库部分数据存储在内存中,如 Redis,读写速度快,能处理高并发请求;部分基于分布式文件系统,如 HBase,可水平扩展,处理海量数据。
4,应用场景:
- 关系型数据库适用于对数据一致性、事务处理要求高,数据结构固定的场景,如银行系统、电子商务的订单处理、企业资源规划(ERP)系统等。
- 非关系型数据库适用于处理非结构化或半结构化数据、高并发读写、对数据灵活性和扩展性要求高的场景,如社交媒体平台、实时数据分析、内容管理系统、缓存系统等。
五:经典数据库模型
关系模型:
- 数据结构:以二维表的形式组织数据,由行和列组成。每一行代表一条记录,每一列代表一个属性,不同的表之间通过外键建立关联关系。
- 特点:结构简单、清晰,易于理解和使用;支持强大的 SQL 语言,能够方便地进行数据查询、插入、更新和删除操作;通过事务处理和约束机制,确保数据的一致性和完整性。
- 应用场景:广泛应用于各种对数据一致性要求较高、数据结构相对固定的场景,如银行系统、企业资源规划(ERP)系统、电子商务的订单处理等
层次模型:
- 数据结构:采用树形结构来组织数据,节点代表实体,树枝代表实体之间的联系,且每个节点有且仅有一个父节点,形成一对多的关系。
- 特点:数据结构简单,层次分明,易于实现数据的完整性约束;查询操作通常沿着层次路径进行,对于特定的层次查询效率较高。
- 应用场景:适用于具有明显层次关系的数据,如组织机构、文件系统等。但由于其结构的局限性,对于非层次结构的数据处理较为困难,且数据的插入和删除操作可能会受到较多限制。
网状模型:
- 数据结构:用网络结构来表示实体及其之间的关系,节点代表实体,边代表实体之间的联系,一个节点可以有多个父节点,节点之间的联系可以是多对多的关系。
- 特点:能够更灵活地表示复杂的数据关系,克服了层次模型的一些限制;可以直接处理多对多关系,无需像层次模型那样进行转换。
- 应用场景:适用于描述复杂的实体关系,如交通网络、物流配送等场景。然而,网状模型的结构较为复杂,数据操作的复杂度也较高,对用户和开发人员的要求相对较高。
面向对象模型:
- 数据结构:将数据和操作数据的方法封装在对象中,对象之间通过消息传递进行通信。对象具有属性和方法,属性用于描述对象的状态,方法用于实现对象的行为。类是对象的模板,具有相同属性和方法的对象可以归为一个类,类之间可以通过继承关系实现代码的复用。
- 特点:与面向对象的编程语言紧密结合,能够很好地处理复杂的对象结构和行为;支持继承、多态等面向对象的特性,提高了代码的复用性和可维护性。
六,使用二进制安装MySQL数据库
1,基础环境准备
- 安装mysql所需依赖包
[root@localhost /]#dnf -y install gcc libaio numactl openssl ncurses-compat-libs
[root@localhost /]#useradd -M -s /sbin/nologin mysql ##创建mysql用户
[root@localhost ~]# ls ##解压用于二进制安装的mysql软件包
anaconda-ks.cfg mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
[root@localhost ~]# tar xvf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
gcc ##是一套用于编译、链接和创建可执行程序的工具集,
libaio ##它允许应用程序在执行 I/O 操作时,不必阻塞线程等待操作完成,从而提高系统的并发性能和响应能力,
numactl ##支持库和工具集。NUMA 是一种多处理器计算机系统的内存架构,numactl 提供了一些工具和库函数,
openssl ## OpenSSL 是一个强大的开源加密库,提供了各种加密算法、数字证书管理、SSL/TLS 协议实现等功能。
ncurses-compat-libs ##一个用于在终端上创建文本用户界面的库,
- 关闭selinux和防火墙
[root@localhost /]#systemctl stop firewalld
[root@localhost /]#systemctl disable firewalld
[root@localhost /]#sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@localhost /]#setenforce 0
2,二进制安装Mysql
[root@localhost ~]# ls
anaconda-ks.cfg mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
mysql-8.0.36-linux-glibc2.28-x86_64
[root@localhost ~]# mv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql ##将压缩后的软件包移动到/usr/local/下并重命名为mysql
[root@localhost /]# mkdir /usr/local/mysql/data ##创建用于存放数据的目录
[root@localhost ~]# cd /usr/local/mysql/bin
##对MySQL进行编译安装
[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
root@localhost为mysql的初始化的密码
3,编写配置文件
[root@localhost /]#vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock ##指定 MySQL 客户端与服务器进行本地通信时所用的 Unix 套接字文件的路径。
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0 ##规定 MySQL 服务器监听的 IP 地址。0.0.0.0 表示服务器会监听所有可用的网络接口,
skip-name-resolve ##启用此选项,MySQL 服务器就不会对客户端的 IP 地址进行反向 DNS 解析。这么做可以加快连接的建立速度,
port = 3306 ##指定 MySQL 服务器监听的 TCP/IP 端口号,默认端口是 3306
basedir=/usr/local/mysql ##指定 MySQL 服务器的安装目录。
datadir=/usr/local/mysql/data ##指定 MySQL 服务器存储数据库文件和日志文件的目录。数据库表、索引以及事务日志等数据都会存放在这个目录下。
max_connections=2048 ##规定 MySQL 服务器允许的最大并发连接数。
character-set-server=utf8 ##设置 MySQL 服务器的默认字符集为 utf8。
default-storage-engine=INNODB ##定 MySQL 服务器创建新表时默认使用的存储引擎为 InnoDB。InnoDB 是 MySQL 中常用的存储引擎,它支持事务、外键约束等特性。
max_allowed_packet=16M ##规定 MySQL 服务器接收的最大数据包大小。
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log ##指定 MySQL 服务器错误日志文件的路径。
[root@localhost /]# ln -s /usr/local/mysql/bin/* /usr/local/bin ##为mysql数据库创建软链接
4,配置systemctl方式启动
[root@localhost /]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@localhost /]#vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld ##对该服务的简短描述
After=network.target ##指定了该服务启动的依赖条件,即该服务需要在 network.target 启动之后才能启动。
[Service]
Type=forking ##指定服务的启动类型。forking 表示该服务在启动时会通过 fork() 系统调用创建子进程,父进程会在子进程启动后退出。
ExecStart=/etc/init.d/mysqld start ##指定启动服务时执行的命令。
ExecReload=/etc/init.d/mysqld restart ##指定重新加载服务配置时执行的命令。
ExecStop=/etc/init.d/mysqld stop ##指定停止服务时执行的命令。
PrivateTmp=true ##如果设置为 true,表示为该服务创建一个独立的临时文件系统(/tmp 和 /var/tmp),
[Install]
WantedBy=multi-user.target ##指定服务的目标单元。multi-user.target 代表多用户模式,将服务配置为被 multi-user.target 需要,
[root@localhost ~]# systemctl daemon-reload ##重载守护进程
[root@localhost ~]# systemctl start mysqld ##启动mysql数据库
[root@localhost ~]# netstat -anpt |grep mysqld ##查看mysql监听的端口号
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 5754/mysqld
tcp6 0 0 :::33060 :::* LISTEN 5754/mysqld
5,访问mysql数据库并修改密码
[root@localhost ~]# mysql -uroot -p
Enter password: ##输入初始化后的密码登陆到数据库
##进入到数据库中修改root用户的登陆密码为pwd123
alter user 'root'@'localhost' identified with mysql_native_password by 'pwd123';
[root@localhost ~]# mysql -uroot -ppwd123 ##使用新密码登陆数据库