MySQL 数据库(一) -- 初体验

前言

数字化时代,数据是企业核心资产,数据库作为数据管理关键工具,是 IT 从业者必备技能。本文从数据库基础概念出发,梳理其分类、发展历史与主流产品,重点讲解 MySQL 的 YUM 安装、库表操作(DDL/DML/DQL 等)、用户权限管理,还补充 LVS 与 IPVS 知识,形成 "理论 + 实践" 体系。无论数据库初学者入门,还是从业者巩固技能,都能通过它快速掌握核心技术,应对实际数据管理需求。

一、数据库概述

数据库是 "高效存、管、取数据的工具",按结构主要分两类:

1、关系型数据库

2、非关系型数据库

(一)数据库基础概念
  1. **数据:**记录客观事物的符号(如数字 "25"、文本 "张三"),是数据库存储的基础,单独存在可能无意义,组合后可形成有用信息。
  2. **表:**关系型数据库中存储同类结构化数据的 "二维表格"(类似 Excel),有固定列(如 "姓名""年龄")和行(如 "张三,25"),通常会设主键确保每条记录唯一。
  3. **数据库:**多个相关表(或非结构化数据)的 "集中仓库",比如电商数据库包含用户表、商品表,能避免数据重复,支持多场景数据共享。
  4. **数据库管理:**对数据库的全流程操作,包括建库建表、增删改查数据、设置权限、备份恢复等,目的是保证数据安全、可用且高效。
  5. **数据库系统原理:**支撑数据库运行的核心逻辑,比如数据组织方式、用户查询处理机制、数据冲突避免方法,是数据库稳定工作的 "底层规则"。
(二)数据库核心分类
  1. 关系型数据库:以结构化数据存储在二维表中,不同表之间有一定数据联系。二维表中:
  • 每一行是一条记录(描述一个对象的信息);
  • 每一列是一个字段(描述对象的一个属性)。
  1. 非关系型数据库

(1)定义:Not Only SQL,存储方式不限于表,可存储键值对、文档、列式数据等。

(2)典型产品:Redis、Memcached、MongoDB、HBase。

(3)应用场景:高并发、缓存、大数据实时计算。

(4)优点:

  • 格式灵活(Key-Value、文档、图片等)
  • 速度快(基于内存存储)
  • 高扩展性
  • 成本低(开源,部署简单)

(5)缺点:

  • 不支持 SQL
  • 缺少事务处理
  • 复杂查询支持不足
  • 大部分数据在内存,成本较高

(6)对比 Redis 和 Memcached

  • 相同点:都存储热点数据,内存运行,速度快。
  • 不同点:Redis 支持持久化,数据可落盘;Memcached 纯内存,断电丢失。
(三)数据库发展历史(三代数据库)

第一代:层次 / 网状数据库(1960年 - 1970年)

第二代:关系型数据库(1970年 - 至今):用 "表" 和 "关系" 存数据,支持 SQL 查询。比如 MySQL、Oracle,结构清晰、易维护,至今仍是企业主流。

第三代:非关系型数据库(2000年 - 至今):应对海量、非结构化数据(如图片、日志),不依赖表结构。比如 MongoDB(存文档)、Redis(存缓存),特点是灵活、读写快。

(四)当今主流数据库介绍
  1. SQL Server(微软产品):面向 Windows 操作系统,特点是简单、易用。
  2. Oracle(甲骨文产品):多用于企业核心数据库,适配中大型项目,支持所有主流平台,安全、功能完善,但操作复杂。
  3. DB2(IBM 产品):属于重量级数据库,支持所有主流平台,具备大型化、安全、完善的特点。
  4. MySQL(现属甲骨文,原开源):企业通用数据库,免费、开源、体积小。
(五)补充:LVS 与 IPVS 相关
  • LVS 通过内核态的 netfilter 框架实现 IPVS 功能,工作在内核态,属于四层架构。
  • IPVS 需借助 ipvsadm 工具操作(ipvsadm 工作在用户态,用于操作内核态的 IPVS)。

二、MySQL

1、是什么?

一种关系型数据库,常用版本为 5.7 和 8.0(注意:MySQL 组成集群时,各节点版本必须一致)。

2、干嘛的?

主要用于存储企业或应用的核心数据。

三、YUM安装MySQL数据库

(一)环境准备

下载依赖工具

yum install -y yum-utils

yum install -y unzip

#上传并解压mysql5.7 依赖环境的rpm包

unzip mysql5720_rpms.zip

切换到存放所有 MySQL 及依赖 RPM 包的文件夹

cd mysql5720_rpms

# yum 会自动识别当前目录下所有 .rpm 文件,并处理依赖关系(若本地包已包含所有依赖,会直接安装; 若缺依赖会提示)

yum localinstall -y *.rpm

补充:mysql.sock 连接数据库内部的通讯文件

(二) 启动mysql,获取初始密码

systemctl start mysqld

grep password mysqld.log

登录mysql

PS:如果密码内容有特殊字符,需要转义

进入数据库、修改密码并验证:

#修改配置文件:

vim /etc/my.cnf

mysqld

其他原有配置(如datadir、socket等)保持不变,新增以下两行 validate_password_policy=LOW

validate_password_length=6

#启动数据库

systemctl restart mysqld

#进入数据库、修改密码并验证:

mysql -uroot -p

alter user 'root'@'localhost' identified by 'abc123';

#验证1: show databases;(库的列表信息)

#验证2:

exit 退出

mysql -uroot -pabc123

1. 开启错误日志(指定日志文件路径,路径可自定义,建议放/var/log下,默认已开启)

#log_error = /var/log/mysqld.lo

2. (可选)设置错误日志级别(默认是 3)

log_error_verbosity = 3

3=记录所有错误/警告/通知;2=记录错误/警告;1=仅记录错误

四、MySQL 数据库管理

(一)数据库基本操作

1. 查看数据库信息

show databases;

用途:查看当前数据库内部空间中所有的库文件(数据库列表)

2. 切换数据库

use 数据库名

用途:切换当前操作的数据库

3. 查看数据库中的表

show tables;

show tables in 数据库名;

4. 查看表结构

describe 表名;(desc 表名;)

DESCRIBE 表名;

5. 查看表中所有内容

select * from 表名

(二)常用数据类型

注意事项

  • CHAR 存入长度不足时补空格,超出指定长度低版本截取,高版本报错。
  • 主键唯一,可由多个字段组成(联合主键)。

(三)数据库文件存储结构

  1. MySQL 数据目录:/usr/local/mysql/data
  2. 每个数据库对应一个子目录,每个表对应若干文件:

(1)MyISAM.frm(表结构)、.MYD(数据)、.MYI(索引)

(2)InnoDB

  • 独享表空间:.ibd 文件(每表一个文件)
  • 共享表空间:ibdata 文件(多个表共用)

(四)SQL 语句分类

(五)DDL操作(数据库和表管理)

1、创建数据库

create database 数据库名;

2、创建数据表

create table 表名 (

​ 字段1 数据类型 [约束条件],

​ 字段2 数据类型 [约束条件],

​ ...

​ primary key (主键字段)

);

【ps:主键通常指的是一张表中拥有唯一性约束的字段】

示例:

字段约束:
  • not null:不能为空
  • default:默认值
  • primary key:主键
  • unique key:唯一键
  • auto_increment:自增长字段

3、删除表

drop table 表名;

drop table 数据库名.表名; -- 不切换数据库时使用

4、删除数据库

drop database 数据库名;

5、修改表结构(ALTER)

(1)修改表名

alter table 旧表名 rename 新表名;

(2)增加字段

alter table 表名 ADD 字段名 数据类型 [约束];

(3)修改字段

  • 既能修改字段名称,也能修改字段的数据类型和约束(三者可同时修改,也可只修改部分)

alter table 表名 CHANGE 旧列名 新列名 数据类型 [约束];

  • 仅修改字段的数据类型和约束,不能修改字段名称(字段名必须是原表中已存在的,且不能变更)

alter table 表名 MODIFY COLUMN 字段名 数据类型;

(4)删除字段

alter table 表名 DROP 字段名;

(六)DML操作(表数据管理)

1、插入数据

insert into 表名(字段1,字段2,...) values (值1, 值2, ...);

示例1:

示例2:

2、更新数据

update 表名 SET 字段1=值1,字段2=值2,... where 条件;

示例:

update KY13 SET passwd=PASSWORD('') where name='zhangsan';

3、删除数据

delete from 表名 where 条件;

4、清空表

-- 方法1: delete

delete from 表名;

-- 方法2: truncate

truncate table 表名;

  • delete 可带 where 条件,可回滚,速度慢
  • truncate 不可回滚,速度快,ID 自增重置

(七)DQL操作(数据查询)

1、查询数据

select 字段1,字段2 from 表名 where 条件;

select * from 表名; -- 查询所有字段

2、限制查询结果(limit 限制)

select * from 表名 limit 起始行, 查询条数;

select * from 表名 limit 2; -- 显示前2行

select * from 表名 limit 2,3; -- 从第2行后,开始显示3行

3、竖向显示结果

select * from 表名\G

(八)表高级操作

1、临时表

create temporary table 表名 (...);

  • 临时表只存在于当前连接,会在连接关闭时自动销毁
  • 可进行增删改查操作
2、克隆表

-- 仅复制表结构

create table 新表名 like 旧表名;

在加上数据表中的数据,需要做插入

-- 插入数据

insert into 新表名 select * from 旧表名;

(九)用户管理

1、创建用户

create user '用户名'@'来源地址' identified by '密码';

  • localhost:本地登录
  • %:允许任意 IP 登录
  • 密码可使用明文或加密方式

2、查看用户

use mysql;

select user, host, authentication_string from user;

3、删除用户

drop user '用户名'@'来源地址';

4、修改密码

set PASSWORD = PASSWORD('新密码'); -- 当前用户

set PASSWORD FOR '用户'@'来源地址' = PASSWORD('新密码'); -- 其他用户

5、忘记 root 密码处理

(1)修改 MySQL 配置文件(添加跳过权限验证)

找到 MySQL 配置文件 /etc/my.cnf 添加:

保存并关闭配置文件

(2)重启 MySQL 服务并免密登录
  • 重启 MySQL 服务(不同系统命令略有差异,选择对应命令)
  • 免密登录 MySQL:在终端直接输入以下命令,无需输入密码即可进入 MySQL 命令行(因已配置 skip-grant-tables):bash
bash 复制代码
mysql -u root

(3)修改 root 密码并刷新权限

  • 进入 MySQL 命令行后,执行以下 SQL 语句修改 root 密码(将 '新密码' 替换为你需要设置的实际密码):sql
sql 复制代码
# 更新 mysql.user 表中 root 用户的密码
update mysql.user set AUTHENTICATION_STRING=PASSWORD('新密码') where user='root';
  • 执行刷新权限命令,确保密码修改立即生效(不刷新可能导致新密码无法使用):sql
sql 复制代码
flush privileges
;
  • 输入 exit; 退出 MySQL 命令行。
(4)恢复配置文件并重启服务(关键:关闭免密登录)
  • 重新打开 /etc/my.cnf 配置文件,删除之前添加的 skip-grant-tables 这一行(若不删除,MySQL 会持续允许免密登录,存在极大安全风险);

  • 保存配置文件后,再次重启 MySQL 服务,使配置生效;

  • 验证新密码:使用修改后的新密码登录 MySQL,确认密码生效:bash

bash 复制代码
mysql -u root -p  # 输入命令后按提示输入新密码,能正常登录即成功

(十)用户授权管理

1、授权用户(分配权限)

基本语法:sql
sql 复制代码
grant 权限列表 on 数据库.表 to '用户名'@'来源地址' identified by '密码';
  • *.* 表示所有数据库和表

示例:

授权本地用户 zhangsan 对 school 数据库所有表的查询权限,密码 abc123sql

sql 复制代码
grant select on school.* to 'zhangsan'@'localhost' identified by 'abc123';

授权用户 lisi 从任意地址访问所有数据库 / 表的全部权限,密码 123456(生产环境慎用):sql

sql 复制代码
grant all privileges on *.* to 'lisi'@'%' identified by '123456';

**授权后若权限未立即生效,需执行刷新权限命令:**ql

sql 复制代码
flush privileges;  

2、查看授权(权限验证)

基本语法
sql 复制代码
show grants for '用户名'@'来源地址';

示例:

查看 zhangsan 本地用户的权限:

sql 复制代码
show grants for 'zhangsan'@'localhost';

3、撤销权限(回收权限)

基本语法s
sql 复制代码
revoke 权限列表 on 数据库.表 from '用户名'@'来源地址';

示例:

撤销 zhangsan 本地用户对 school 数据库所有表的查询权限:

sql 复制代码
revoke select on school.* from 'zhangsan'@'localhost';

撤销 lisi 从任意地址访问所有数据库 / 表的全部权限:

sql 复制代码
revoke all privileges on *.* from 'lisi'@'%';
  • 撤销权限后需执行 flush privileges; 刷新权限,确保回收生效;
  • 撤销权限时,数据库.表 和 来源地址 需与授权时完全一致,否则撤销失败。

(十一)权限说明

权限 功能
select 查询数据
insert 插入数据
update 修改数据
delete 删除数据
create 创建数据库 / 表
drop 删除数据库 / 表
index 建立索引
alter 修改表结构
execute 执行存储过程
create view 创建视图
show view 查看视图
create routine 创建存储过程
alter routine 修改存储过程
event 创建事件
trigger 创建触发器
all privileges 所有权限

总结

一、数据库基础体系
  1. 核心功能:明确 "存、管、取" 数据的核心定位
  2. 类型差异:区分关系型(二维表存储、支持 SQL,如 MySQL、Oracle)与非关系型(灵活存键值对 / 文档等,如 Redis、MongoDB)数据库
  3. 发展脉络:梳理从层次 / 网状数据库,到关系型数据库,再到非关系型数据库的迭代历程
  4. 产品特性:介绍 SQL Server(适配 Windows、易用)、DB2(全平台、安全稳定)等主流产品,奠定理论基础
二、MySQL 实操核心
  1. 安装流程:详解 YUM 安装(含依赖安装、RPM 包处理)、初始密码获取与修改步骤
  2. 核心操作:
  • DDL:库表创建 / 删除 / 修改
  • DML:数据插入 / 更新 / 删除
  • DQL:数据查询(含 limit 限制、竖向显示)
  • 进阶操作:覆盖临时表克隆、MyISAM 与 InnoDB 文件存储差异,形成完整实操手册
三、用户与权限安全
  1. 用户管理:含用户创建、查看、删除,及 root 密码重置(含遗忘解决方案)
  2. 权限控制:明确授权、查权、撤权操作及语法,说明 select、all privileges 等权限功能
  3. 安全原则:强调生产环境 "权限最小化",如慎用 "%" 任意 IP 授权,保障数据库安全
相关推荐
e***98571 小时前
Window下Redis的安装和部署详细图文教程(Redis的安装和可视化工具的使用)
数据库·redis·缓存
X***C8621 小时前
【Oracle11g SQL详解】UPDATE 和 DELETE 操作的正确使用
数据库·sql
爬山算法1 小时前
Redis(156)Redis的延迟问题如何解决?
数据库·redis·缓存
v***91301 小时前
Windows版Redis本地后台启动
数据库·windows·redis
x***44011 小时前
【prometheus】监控MySQL并实现可视化
数据库·mysql·prometheus
k***81721 小时前
使用Canal将MySQL数据同步到ES(Linux)
linux·mysql·elasticsearch
h***04771 小时前
MySQL 的 INSERT(插入数据)详解
android·数据库·mysql
梁bk1 小时前
Redis 数据类型(上)String,List,Set
数据库·redis
田超凡1 小时前
深入理解MySQL_4 数据存储
mysql·java-ee