MySQL数据库初体验

发布于:2025-05-09 ⋅ 阅读:(11) ⋅ 点赞:(0)

目录

一、数据库基础概念

1.1 数据库相关基本概念

1.2 数据模型

1.3 数据库分类

二、MySQL 数据库深入解析

2.1 MySQL 简介

2.2 MySQL 安装

2.3 访问 MySQL 数据库

三、关系数据库关键概念拓展

3.1 关系数据库基本结构

3.2 主键与外键

3.3 数据完整性规则


一、数据库基础概念

1.1 数据库相关基本概念

  1. 记录与列:在数据库中,一行数据称为一条 “记录”(Record),记录中的每一个输入项称为 “列”。例如,在学生信息表中,“编号”“姓名”“性别” 等都是列名,而每一行具体的学生信息就是一条记录。
  2. 数据库与数据库表:不同记录组织在一起形成数据库(Database,DB)的 “表”(Table)。表用于存储具体数据,数据库是表的集合,以一定组织方式存储相互有关的数据集合。关系数据库的表由记录组成,记录由字段组成,字段由字符或数字组成,具有最小冗余度和较高的数据独立性,且要表示数据之间的关系。例如,图书管理系统中,“图书表” 和 “读者表” 通过 “借阅关系” 相互关联,这种关系也是数据库的一部分。
  3. 数据库管理系统与数据库系统
    • 数据库管理系统(Database Management System,DBMS):是实现对数据库资源有效组织、管理和存取的系统软件,在操作系统支持下,支持用户对数据库的各项操作。其功能包括数据库的建立和维护(如建立结构、录入数据、转储恢复等)、数据定义(定义数据结构、存储结构等)、数据操纵(查询统计和数据更新)、数据库的运行管理(并发控制、存取控制等)以及通信功能(与其他软件系统进行数据交换,如 Access 与其他 Office 组件)。
    • 数据库系统(Database System,DBS):是一个人 - 机系统,一般由硬件、操作系统、数据库、DBMS、应用软件和数据库用户(包括数据库管理员)组成。用户可通过 DBMS 或应用程序操作数据库,应用程序是利用 DBMS 解决具体管理或数据处理任务而编制的一系列程序。

1.2 数据模型

  1. 数据模型概述:数据模型(Data Model)是数据特征的抽象,是数据库系统的核心与基础,表现为数据的结构、定义在其上的操作及约束条件,从概念层次描述系统的静态特征、动态特征和约束条件,为数据库系统的信息表示与操作提供抽象框架。
  2. 经典数据模型
    • 网状模型
      • 数据结构:数据记录组织成图的形式,用 “数据结构图” 表示。如银行客户、银行账户和银行支行的关系,一个银行客户可拥有多个银行账号(一对多),一个银行账号可被多个客户所有(一对多),每个银行账户位于特定的银行支行(一对一),能很好地支持复杂数据关系,数据结构模型直观反映现实数据联系。
      • 数据操作:建立在关系链基础上的导航式操作。针对特定网状模型系统的数据结构,可能找到最优查询算法,但结构变化时需新的查询办法,由于以图论为基础,无法得到通用高效解决方案,随着关系模型发展,其重要性逐渐降低。
      • 数据约束:数据约束零散孤立,或分散在各个节点,或集中为关系链,易导致不一致性或降低效率,通常由应用程序自身实现数据约束,增加了开发难度。
    • 层次模型
      • 数据结构:是网状模型的特例,数据记录组织成树的形式,用 “树结构图” 表示,适合一对多的关系模型。如企业组织结构,企业下辖多个部门,部门下辖多个科室,科室下辖多个小组,禁止多对多和多对一关系,数据结构相对简单 。
      • 数据操作:具有导航性,类似网状模型,但在层次结构明确的情况下,部分操作相对简单。例如,查询某个部门下的所有小组,可通过树状结构快速定位。
      • 数据约束:与网状模型类似,约束实现存在困难,通常依赖应用程序,且由于结构的层次性,在处理复杂关系时不够灵活。
    • 关系模型:以二维表格形式组织数据,每行是一条记录,每列是一个字段。具有结构简单、数据独立性高、建立在严格数学理论基础上等优点,是目前应用最广泛的数据模型。关系数据库系统基于关系模型,通过定义主键(保证记录唯一性)、外键(建立表间关联)和数据完整性规则(实体完整性、域完整性、引用完整性和用户定义完整性)来维护数据的一致性和准确性。

1.3 数据库分类

  1. 关系数据库:基于关系模型的数据库系统,使用多个二维表格存储数据,通过主键和外键建立表间关联。常见的关系数据库有 Oracle、DB2、MySQL 等。关系数据库具有数据结构清晰、操作方便、数据完整性强等优点,适用于数据关系复杂、对数据一致性要求高的应用场景,如企业资源规划(ERP)系统、财务管理系统等。
  2. 非关系数据库:也称作 NoSQL(Not Only SQL),存储数据不以关系模型为依据,不需要固定的表格式。具有高并发读写性能好、海量数据存储与访问效率高、扩展性和可用性强等优点,适用于对读写速度要求极高、数据结构灵活的场景,如互联网公司的缓存系统、日志存储系统等。常用的非关系数据库有 Memcached、Redis、MongoDB、HBase 等。

二、MySQL 数据库深入解析

2.1 MySQL 简介

MySQL 是一个真正的多线程、多用户的 SQL 数据库服务,具有高性能、高可靠和易于使用的特性,是服务器领域中最受欢迎的开源数据库系统。其发展历程历经多次收购,目前由 Oracle 公司负责运营和维护。MySQL 可与多种软件组合使用,如与 Linux、Apache、PHP/Perl/Python 组成 LAMP 组合,广泛应用于中小型网站建设。

2.2 MySQL 安装

  1. 编译安装
    • 准备工作
      • 卸载冲突软件:若系统已安装 MariaDB 数据库,需先卸载,如在 OpenEuler 系统中,使用命令rpm -q mariadb查看是否安装,若已安装则用dnf remove mariadb卸载;同时关闭 SELinux 和防火墙,执行sed -i's/SELINUX=enforcing/SELINUX-disabled/' /etc/selinux/configsetenforce 0关闭 SELinux,systemctl disable firewalldsystemctl stop firewalld关闭防火墙。
      • 安装依赖包:安装编译所需的依赖包,如gccgcc - c++makecmake等,使用命令dnf install -y gcc gcc - c++ make cmake autoconf libtool bison re2c openssl - devel libxml2 - devel zlib - devel curl - devel libpng - devel libjpeg - turbo - devel freetype - devel libicu - devel oniguruma - devel sqlite - devel libxslt - devel libzip - devel pcre - devel apr - devel apr - util - devel ncurses - devel wget libtirpc - devel rpcgen
      • 安装 cmake:从官方网站Download CMake下载最新稳定版本的 cmake 包,如cmake - 3.16.2.tar.gz,解压后进入目录执行./configuregmake && gmake install进行安装。
      • 准备 Boost 库:MySQL 5.7 及部分版本需要 Boost 库,从http://sourceforge.net/projects/boost/files/boost/下载对应版本,如boost_1_77_0,解压后将其移动到/usr/local/boost目录。
    • 源码编译及安装
      • 创建运行用户:为加强权限控制,创建专门的运行用户mysql,不创建宿主文件夹,使用命令groupadd mysqluseradd -M -s /sbin/nologin mysql -g mysql
      • 解包:将下载的 MySQL 源码包mysql - 8.0.36.tar.gz解压到/usr/src目录,然后切换到解压后的源码目录,执行tar zxf mysql - 8.0.36.tar.gz -C /usr/srccd /usr/src/mysql - 8.0.36
      • 配置:为支持多种字符集,创建独立构建目录并进行配置。在配置命令cmake.. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/usr/local/mysql/data -DWITH_SSL=system -DENABLED_LOCAL_INFILE=ON -DWITH_BOOST=/usr/local/boost -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DWITH_EXTRA_CHARSETS=all中,..指定上层源码目录,-DCMAKE_INSTALL_PREFIX指定安装目录,-DSYSCONFDIR设置配置文件存储位置,-DMYSQL_DATADIR设置数据文件存储位置,-DWITH_BOOST指定 Boost 库位置(MySQL 8.0 版本编译安装时必须添加),-DWITH_SSL使用系统 SSL/TLS 库支持加密连接,-DENABLED_LOCAL_INFILE允许从客户端本地文件加载数据。
      • 编译安装:执行make -j$(nproc)进行并行编译($(nproc)获取系统可用处理器核心数量,提高编译速度),然后执行make install完成安装。
    • 安装后的其他调整
      • 建立配置文件:MySQL 8.0.36 版本开始安装包内不提供默认配置文件my - default.cnf,需手动创建/etc/my.cnf。基本配置如下:
[client]
socket=/usr/local/mysql/data/mysql.sock
[mysqld]
socket=/usr/local/mysql/data/mysql.sock
#绑定监听地址0.0.0.0
bind - address = 0.0.0.0
skip - name - resolve
#设置3306端口
port = 3306
#设置mysql的安装目录
basedir=/usr/local/mysql
#设置mysql数据库的数据的存放目录
datadir=/usr/local/mysql/data
#允许最大连接数
max_connections=2048
#服务端使用的字符集默认为utf8
character - set - server=utf8
#创建新表时将使用的默认存储引擎
default - storage - engine=INNODB
max_allowed_packet=16M

  • 初始化数据库:以mysql用户身份执行初始化,指定数据存放目录等,使用命令/usr/local/mysql/bin/mysqld --initialize - insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data(无密码模式)。若采用有密码模式初始化,如二进制安装时,会生成初始随机密码,需保存用于后续登录。
  • 设置环境变量:为方便在任何目录使用mysql命令,在/etc/profile中设置环境变量,执行echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile,然后执行./etc/profile使设置立即生效。
  • 添加系统服务:将 MySQL 添加为 systemd 标准服务,方便使用systemctl命令管理。找到support - files文件夹下的mysql.server脚本文件,复制到/etc/rc.d/init.d目录下并改名为mysqld,设置执行权限chmod +x /etc/rc.d/init.d/mysqld。编辑生成mysqld.service服务文件,内容如下:
[Unit]
Description=mysqld
After=network.target
[Service]
Type=forking
ExecStart=/etc/rc.d/init.d/mysqld start
ExecReload=/etc/rc.d/init.d/mysqld restart
ExecStop=/etc/rc.d/init.d/mysqld stop
PrivateTmp=true
[Install]
WantedBy=multi - user.target

执行systemctl daemon - reloadsystemctl enable mysqld,之后就可以使用systemctl工具或直接调用/etc/init.d/mysqld脚本来控制 MySQL 数据库服务,如启动服务systemctl start mysqld.service,查看运行状态systemctl status mysqld.service。MySQL 服务器默认通过 TCP 3306 端口提供服务,可通过编辑/etc/my.cnf配置文件中[mysqld]配置段的port = 3306行更改监听端口。
2. 二进制安装

  • 基础环境准备:若采用 OpenEuler minimal 安装的系统,需安装一些基础软件包工具,如gccvimwget等,执行dnf -y install gcc vim wget net - tools lrzsz tar。安装 MySQL 依赖的软件包libaionumactlopenssl等,使用命令dnf install -y libaio numactl openssl ncurses - compat - libs。创建运行 MySQL 程序的用户useradd -M -s /sbin/nologin mysql,关闭 SELinux 和防火墙,操作与编译安装时相同。
  • 二进制安装:下载 MySQL 8.0.36 的二进制安装包mysql - 8.0.36 - linux - glibc2.28 - x86_64.tar.xz,解压后将其移动到/usr/local/mysql目录,创建数据目录mkdir /usr/local/mysql/data,并设置目录权限chown -R mysql:mysql /usr/local/mysql,进入/usr/local/mysql/bin目录执行./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data进行初始化,此时会生成初始随机密码,需保存用于后续登录。
  • 设定配置文件:MySQL 的配置文件与编译安装类似,创建/etc/my.cnf文件并进行配置,配置内容与编译安装时基本相同。将 MySQL 的可执行文件写入环境变量,执行echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile并使配置生效./etc/profile
  • 配置 systemctl 方式启动:与编译安装添加系统服务步骤相同,将/usr/local/mysql/support - files目录下的mysql.server文件复制到/etc/rc.d/init.d目录下改名为mysqld并赋予可执行权限,编辑生成mysqld.service服务文件,执行相关命令使 MySQL 服务可通过systemctl管理。

2.3 访问 MySQL 数据库

  1. 登录到 MySQL 服务器:安装初始化后,MySQL 数据库的默认管理员用户名为 “root”,密码为给定的随机密码(若初始化采用无密码模式则需自行设置密码)。以 root 用户登录本机 MySQL 数据库,执行mysql -u root -p,根据提示输入密码,登录成功后可修改密码,如alter user 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'pwd123';(单引号内为新密码)。
  2. 执行 MySQL 操作语句:验证成功进入 “mysql>” 的数据库操作环境后,可输入各种操作语句对数据库进行管理。MySQL 操作语句以分号 “;” 结束,输入时不区分大小写,但习惯将关键字大写。例如,执行 “SHOW DATABASES;” 语句可查看当前数据库中的库。
  3. 退出 “mysql>” 操作环境:在 “mysql>” 操作环境中,执行 “EXIT” 或 “QUIT” 命令即可退出 mysql 命令工具,返回原来的 Shell 环境。

三、关系数据库关键概念拓展

3.1 关系数据库基本结构

关系数据库使用多个二维表格作为存储结构,每个二维表中,每一行是一条记录,用于描述一个对象的信息;每一列是一个字段,用于描述对象的一个属性。数据表之间通过关联来查询相关数据,数据表用于说明数据库中某一特定方面或部分的对象及其属性。例如,在学生管理系统中,“学生信息表” 存储学生的基本信息,“课程表” 存储课程信息,通过 “选课表” 建立学生与课程之间的关联,实现多对多关系的表示。

3.2 主键与外键

  1. 主键:用于保证数据表中每行记录的唯一性,由一个或多个字段组成,其值具有唯一性且不允许取空值(NULL)。一个表只能有一个主键,若存在多个能唯一标识表中一行的属性集,则这些属性集称为候选键,只能选择其中一个作为主键,其他候选键称为备用键。如在 “学生信息统计表” 中,“编号”“身份证号” 或 “姓名,专业编号” 等都可能是候选键,可将 “编号” 定义为主键。
  2. 外键:用于建立和加强两个表数据之间的链接,通过将一个表的主键值的一列或多列添加到另一个表中,创建两个表之间的链接,该列即为第二个表的外键。例如,“专业名称表” 中的 “专业编号” 是主键,“学生信息统计表” 中的 “专业编号” 则为外键,“专业名称表” 是主表,“学生信息统计表” 是从表,主表和从表通过外键形成关联。

3.3 数据完整性规则

  1. 实体完整性规则:要求关系中的元组在主键的属性上不能有空值,否则主键值无法唯一标识元组。如在 “学生信息表” 中,若 “编号” 作为主键,则 “编号” 字段不允许为空。
  2. 域完整性规则:也称列完整性,指定一个数据集对某一个列是否有效或确定是否允许空值。例如,在 “学生信息表” 中,定义 “性别” 字段只能取值为 “男” 或 “女”,防止输入无效值。
  3. 引用完整性规则:若两个表相互关联,不允许引用不存在的元组。如在学生信息管理系统

网站公告

今日签到

点亮在社区的每一天
去签到