MySQL数据库初体验

目录

一、数据库基础概念

[1.1 数据库相关基本概念](#1.1 数据库相关基本概念)

[1.2 数据模型](#1.2 数据模型)

[1.3 数据库分类](#1.3 数据库分类)

[二、MySQL 数据库深入解析](#二、MySQL 数据库深入解析)

[2.1 MySQL 简介](#2.1 MySQL 简介)

[2.2 MySQL 安装](#2.2 MySQL 安装)

[2.3 访问 MySQL 数据库](#2.3 访问 MySQL 数据库)

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

[3.1 关系数据库基本结构](#3.1 关系数据库基本结构)

[3.2 主键与外键](#3.2 主键与外键)

[3.3 数据完整性规则](#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行更改监听端口。

  1. 二进制安装
  • 基础环境准备 :若采用 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. 引用完整性规则:若两个表相互关联,不允许引用不存在的元组。如在学生信息管理系统
相关推荐
不剪发的Tony老师3 分钟前
Redis 8.0正式发布,再次开源为哪般?
数据库·redis
极小狐23 分钟前
如何使用极狐GitLab 软件包仓库功能托管 ruby?
开发语言·数据库·人工智能·git·机器学习·gitlab·ruby
鱼儿也有烦恼2 小时前
Redis最新入门教程
数据库·redis·缓存
牛马程序小猿猴2 小时前
17.thinkphp的分页功能
前端·数据库
我科绝伦(Huanhuan Zhou)2 小时前
Oracle免费认证来袭
数据库·oracle
@CLoudbays_Martin113 小时前
CF后台如何设置TCP 和 UDP 端口?
大数据·运维·服务器·网络·数据库
步、步、为营3 小时前
.NET中使用HTTPS全解析
数据库·https·.net
漠月瑾-西安3 小时前
信创背景下的分布式数据库备份难题及解决之道
数据库·分布式·信创·数据备份
神仙别闹4 小时前
基于QT(C++)实现(图形界面)校园导览系统
数据库·c++·qt
三流搬砖艺术家4 小时前
Windows 下 MongoDB 安装指南
数据库·mongodb