MySQL 数据库初体验
目录
一、数据库简介
1、使用数据库的必要性
2、数据库的基本概念
(1)数据
(2)数据库和数据库表
(3)数据库管理系统和数据库系统
3、数据库系统发展史
4、经典数据模型
(1)网状模型
(2)层次模型
(3)关系模型
5、当前主流数据库介绍
(1)关系数据库(主流商用)
(2)非关系数据库(NoSQL)
6、关系数据库的基本概念
(1)关系数据库的基本结构
(2)主键与外键
①主键
②外键
(3)数据完整性规则
二、MySQL 的安装
1、基础环境准备
2、二进制安装
3、设定配置文件
4、配置systemctl 方式启动
5、访问MySQL数据库
(1)登录到MySQL服务器
(2)执行MySQL操作语句
(3)退出“mysql”操作环境
一、数据库简介
1、使用数据库的必要性
使用数据库可以高效且条理分明地存储数据,使人们能够更加迅速、方便地 管理数据。数据库具有以下特点:
- 可以结构化存储大量的数据信息,方便用户进行有效的检索和访问。
- 可以有效地保持数据信息的一致性、完整性,降低数据冗余。
- 可以满足应用的共享和安全方面的要求。
2、数据库的基本概念
(1)数据
描述事物的符号记录称为数据(Data)。
数字、文字、图形、图像、声音、 档案记录等都是数据。
在数据库中,数据是以"记录"的形式按照统一的格式进行存储的,而不是杂乱无章的。相同格式和类型的数据统一存放在一起,而不会把“人”和“书”混在一起存储。这样,数据的存储就能够井然有序。
(2)数据库和数据库表
不同的记录组织在一起,就形成了数据库(Database,DB)的"表" (Table)。也可以说,表是用来存储具体数据的。那么数据库和表存在什么关系呢?
简单地说,数据库就是表的集合。它是以一定的组织方式存储的相互有关的数据集合。例如,关系数据库的表由记录组成,记录由字段 组成,字段由字符或数字组成。它可以供各种用户共享,具有最小冗余度和较高的数据独立性,它是统一管理的相关数据的集合。通常,数据库并不是简单地存储这些数据的,还要表示它们之间的关系。例如,书和人是存在联系的,书的作者可能就是某个人,因此需要建立书与人的"关系"。这种关系也需要用数据库来表示,因此关系的描述也是数据库的一部分。
(3)数据库管理系统和数据库系统
数据库管理系统(Database Management System,DBMS)是实现对数据库资 源有效组织、管理和存取的系统软件。它在操作系统的支持下,支持用户对数据 库的各项操作。DBMS主要包括以下功能。
- 数据库的建立和维护功能:包括建立数据库的结构和数据的录入与转换、数 据库的转储与恢复、数据库的重组与性能监视等功能。
- 数据定义功能:包括定义全局数据结构、局部逻辑数据结构、存储结构、保 密模式及信息格式等功能。保证存储在数据库中的数据正确、有效和相容,以 防止不合语义的错误数据被输入或输出。
- 数据操纵功能:包括数据查询统计和数据更新两个方面。
- 数据库的运行管理功能:这是数据库管理系统的核心部分,包括并发控制、 存取控制、数据库内部维护等功能。
- 通信功能:DBMS与其他软件系统之间的通信,如Access能与其他Office 组件进行数据交换。
数据库系统(Database System, DBS)是一个人-机系统,一般由硬件、操 作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。 用户可以通过DBMS操作数据库,也可以通过应用程序操作数据库。
应用程序是利用DBMS为解决某个具体的管理或数据处理的任务而编制的一系列命令的有序集合。如果应用程序比较完善,能够提供友好的人机界面,并编译 成可执行文件发行,使得普通用户不需要具备计算机的专业知识,在较短时间 就学会使用,那么就称为数据库应用软件。
常用的数据库应用软件有人事管理、财务管理、图书管理等信息管理软件及各类 信息咨询系统等。
数据库管理员(Database Administrator,DBA)负责数据库的更新和备份 数据库系统的维护、用户管理等工作,保证数据库系统的正常运行。DBA一般 由业务水平较高、资历较深的人员担任。
3、数据库系统发展史
- 第一代(20 世纪 60 年代):层次与网状模型
特点:数据结构为树(层次)或图(网状),支持复杂关系(如 “部门 - 科室” 层次、“客户 - 账户” 网状关系)。
代表:IBM 的 IMS(层次)、CODASYL 的 DBTG(网状)。
- 第二代(20 世纪 70 年代至今):关系模型
特点:使用二维表存储数据,通过 SQL 语言操作,简化开发(如 “学生表” 通过主键 “学号” 唯一标识记录)。
代表:Oracle、DB2、MySQL 等,目前主流用于商务场景。
注:关系数据库系统将结构化查询语言(Structured Query Language,SQL)作为数据定义语言(Data Definition Language,DDL)和数据操作语言(Data M anipulation Language,DML),它一诞生就成为关系数据库的标准语言。SQL使得关系数据库中的数据库表的查询可以通过简单的、声明性的方式进行,大大简化了程序员的工作。
- 第三代(20 世纪 80 年代后):新型数据库
需求:适应工程设计、多媒体、分布式等领域,如面向对象数据库、分布式数据库(如 MongoDB)、云数据库(如阿里云 RDS)。
4、经典数据模型
数据是现实世界中"量"的抽象,而数据模型(Data Mode1)是数据特征 的抽象。在数据库系统中,数据模型是它的核心与基础。数据模型表现为数据的 结构、定义在其上的操作及约束条件。它从概念层次上描述了系统的静态特征、 动态特征和约束条件,为数据库系统的信息表示与操作提供了一个抽象框架。
在DBMS的发展过程中,出现了网状模型、层次模型和关系模型三种经典的 数据模型。由于受限于数学基础、编程技术和硬件条件,最初出现的层次模型 和网状模型与关系模型相比,在用户接口的上、中层部分更易于实现。所以, 这在很长一段时间阻碍了关系模型的发展。
数据模型所描述的内容包括三方面:数据结构、数据操作和数据约束。
(1)网状模型
数据结构为图,支持多对多关系(如 “客户拥有多个账户,账户属于多个客户”),但操作复杂,依赖应用程序实现约束。
(2)层次模型
数据结构为树,支持一对多关系(如 “公司 - 部门 - 科室”),结构简单但不支持多对多。
(3)关系模型
核心:二维表,每一行是记录,每一列是字段(如 “学生表” 包含学号、姓名、专业)。
优势:理论基础坚实(关系代数),支持 SQL 语言,数据独立性高,易于用户理解。
5、当前主流数据库介绍
(1)关系数据库(主流商用)
MySQL:开源、轻量,适合中小型系统(如 LAMP 架构),被 Oracle 收购。
Oracle:企业级数据库,支持高并发和复杂业务,广泛用于大型企业。
SQL Server:微软产品,与 Windows 深度整合,适合微软生态用户。
DB2:IBM 开发,支持多平台,擅长处理海量数据和复杂事务。
(2)非关系数据库(NoSQL)
- 特点:不依赖二维表,支持高并发、海量数据存储(如 Redis 用于缓存,MongoDB 用于文档存储)。
- 应用场景:互联网实时数据处理、分布式系统(如电商订单缓存、日志分析)。
6、关系数据库的基本概念
关系数据库系统是基于关系模型的数据库系统,是关系模型应用到数据库领域的实例化。
它的基本概念来自于关系模型。
(1)关系数据库的基本结构
在每个二维表中,每一行称为一条记录,用来描述一个对象的信息:每一列 称为一个字段,用来描述对象的一个属性。数据表与数据库之间存在相应的关联, 这些关联用来查询相关的数据。图1.7所示就是一个数据表。
关系数据库是由数据表之间的关联组成的。
- 数据表通常是一个由行和列组成的二维表,每一个数据表分别说明数据库中某一特定的方面或部分的对象及其属性。
- 数据表中的行通常叫做记录或者元组,它代表众多具有相同属性的对象中的一个。
- 数据表中的列通常叫做字段或者属性,它代表相应数据库中存储对象的共有 属性。
(2)主键与外键
①主键
数据表中的每行记录都必须是唯一的,而不允许出现完全相同的记录,通过定义 主键(主关键字,Primary Key)可以保证记录(实体)的唯一性。
键,即关键字,它是关系模型中一个非常重要的元素。
主键唯一标识表中的行数据,一个主键值对应一行数据。主键由一个或多个字段组成,其值具有唯一性,不允许取空值(NULL)。一个表只能有一个主键。
如果一个属性集能唯一地标识表的一行而又不含有多余的属性,那么这个属 性集称为候选键。表中可以有多个候选键,但是只能有一个候选键可以选作表的主键,所有其他候选键称为备用键。
②外键
一个关系数据库通常包含多个表,通过外键(Foreign Key)可以使这些表关联起来。
外键是用于建立和加强两个表数据之间的链接的一列或多列。通过将表中主 键值的一列或多列添加到另一个表中,可创建两个表之间的链接。这个列就称为第二个表的外键。
(3)数据完整性规则
为了维护数据库中的数据与现实世界的一致性,关系数据库的数据与更新操 作必须遵守下列四类完整性规则。
- 实体完整性规则:实体完整性规则要求关系中的元组在主键的属性上不能有空值。如果出现空值,那么主键值就起不到唯一标识元组的作用。
- 域完整性规则:域完整性也称列完整性,指定一个数据集对某一个列是否有效或确定是否允许空值。
- 引用完整性规则:如果两个表之间相互关联,那么引用完整性规则要求不允许引用不存在的元组。
- 用户定义的完整性规则:用户定义的完整性规则是针对某一具体数据的约束条件,由应用环境决定。它反映某一具体应用所涉及的数据必须满足的语义要求。系统提供定义和检验这类完整性的机制,以便用统一的系统方法进行处理,不再由应用程序承担这项工作。
二、MySQL 的安装
MySQL的安装方式除了常规的源码编译安装之外,最常用的还包括YUM方式安装和二进制方式安装。二进制安装方式中,包括rpm 版本以及glibc 版本。 rpm版本就是在特定Linux版本下编译的,如果你的Linux版本匹配,就可以 安装。如下载Cent0S7系统所对应编译好的rpm包安装即可。另外一种二进制 安装包是基于特定的glibc版本编译的,这里主要讲解基于glibc方式安装 MySQL。
1、基础环境准备
安装MySQL依赖的软件包
[rootelocalhost ~]# dnf -y install gcc vim wget net-tools lrzsz tar
[root@localhost ~]# dnf -y install libaio numactl openssl ncurses-compat-libs
创建运行MySQL程序的用户
[root@localhost ~]# useradd -M -s /sbin/nologin mysql
关闭SELinux 和防火墙
[root@localhost ~]# systemctl stop firewalld
[root@localhost ~]# systemctl disable firewalld
Removed "/etc/systemd/system/multi-user.target.wants/firewalld.service".
Removed "/etc/systemd/system/dbus-org.fedoraproject.FirewallD1.service".
[root@localhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
[root@localhost ~]# setenforce 0
2、二进制安装
MySQL 8.0.36
[root@localhost ~]# tar xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz
[root@localhost ~]# mv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql
[root@localhost ~]# mkdir /usr/local/mysql/data
[root@localhost ~]# chown -R mysql:mysql /usr/local/mysql
[root@localhost ~]# cd /usr/local/mysql/bin/
[root@localhost bin]# ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/
2025-03-01T03:48:26.853113Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.36) initializing of server in progress as process 9297
2025-03-01T03:48:26.875072Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2025-03-01T03:48:27.554342Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2025-03-01T03:48:33.310861Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: VpNezsrym0)A
此次初始化没有采用无密码模式,因此会生成初始随机密码,需要保存,用以后续登录MySQL数据库使用
3、设定配置文件
[root@localhost ~]# vim /etc/my.cnf
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
bind-address = 0.0.0.0
skip-name-resolve
port = 3306
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
max_connections=2048
character-set-server=utf8
default-storage-engine=INNODB
max_allowed_packet=16M
[mysqld_safe]
log-error=/usr/local/mysql/data/error.log
将MySQL的可执行文件写入环境变量中
[root@localhost ~]# vim /etc/profile
export PATH=$PATH:/usr/local/mysql/bin
[root@localhost ~]# . /etc/profile #使配置在当前 Shell 中生效
4、配置systemctl 方式启动
将MySQL添加成为系统服务,通过使用systemctl来管理在/usr/local/mysql/support-files目录下找到mysql.server 文件将其复制到/etc/init.d 目录下,改名为 mysqld
[root@localhost ~]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
编辑生成mysqld.service 服务,通过systemctl 方式来管理
[root@localhost ~]# vim /lib/systemd/system/mysqld.service
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/init.d/mysqld start
ExecReload=/etc/init.d/mysqld restart
ExecStop=/etc/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi-user.target
[root@localhost ~]# systemctl daemon-reload
[root@localhost ~]# systemctl enable mysqld
[root@localhost ~]# systemctl start mysqld
[root@localhost ~]# systemctl status mysqld
[root@localhost ~]# netstat -anpt | grep mysqld
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 9792/mysqld
tcp6 0 0 :::33060 :::* LISTEN 9792/mysqld
5、访问MySQL数据库
MySQL 数据库系统也是一个典型的C/S(客户端/服务器)架构的应用,要访问 MySQL数据库需要使用专门的客户端软件。在Linux系统中,最简单、易用的 MySQL 客户端软件是 其自带的 mysql 命令工具。
(1)登录到MySQL服务器
经过安装后的初始化过程,MySQL 数据库的默认管理员用户名为“root密码为给定的随机密码。以 root 用户登录本机的 MySQL 数据库,可以执行以下操作。
[root@localhost ~]# mysql -uroot -p
Enter password: #根据提示输入上述的随机的密码,然后修改密码
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.36Copyright (c) 2000, 2024, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.mysql>
mysql> alter user 'root'@'localhost' identified with mysql_native_password by 'pwd123';#单引号内为新密码
Query OK, 0 rows affected (0.01 sec)
(2)执行MySQL操作语句
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.02 sec)mysql>
(3)退出“mysql”操作环境
mysql> exit
Bye
[root@localhost ~]#
执行quit 命令与exit 命令效果相同