提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
文章目录
- 前言
- 数据库基础:从概念到MySQL实战全指南
-
- 一、数据库核心概念
-
- [1. 基础定义](#1. 基础定义)
- [2. 架构关联](#2. 架构关联)
- 二、数据库发展与分类
-
- [1. 发展历程](#1. 发展历程)
- [2. 两大核心类型对比](#2. 两大核心类型对比)
- [3. 选型思路](#3. 选型思路)
- [三、MySQL 5.7源码编译安装](#三、MySQL 5.7源码编译安装)
-
- [1. 环境准备](#1. 环境准备)
- [2. 源码处理](#2. 源码处理)
- [3. 编译配置](#3. 编译配置)
- [4. 配置优化](#4. 配置优化)
- [5. 环境变量与初始化](#5. 环境变量与初始化)
- [6. 服务管理与登录](#6. 服务管理与登录)
- 四、MySQL数据库管理操作
-
- [1. 基本操作](#1. 基本操作)
- [2. 常用数据类型](#2. 常用数据类型)
- [3. 文件存储结构](#3. 文件存储结构)
- [4. SQL语句分类及操作](#4. SQL语句分类及操作)
- [5. 高级表操作](#5. 高级表操作)
- [6. 用户与权限管理](#6. 用户与权限管理)
- [7. 常用权限说明](#7. 常用权限说明)
前言
数据库基础:从概念到MySQL实战全指南
本文整理了数据库核心知识,涵盖基础概念、发展历程、分类对比,以及MySQL 5.7编译安装与实战操作,适合作为学习笔记或技术参考。
一、数据库核心概念
1. 基础定义
- 数据:描述客观事物的符号记录(数字、文字、图像、声音等),以统一格式的记录形式存储,相同类型数据分类存放(如"学生"数据独立于"图书"数据)。例如:班级同学信息中,一名同学是一条记录,包含学号、姓名、性别等属性。
- 表:由行(记录)和列(字段)组成的核心结构,记录由字符/数字类型的字段构成,支持多用户共享,具有低冗余、高数据独立性特点。
- 数据库:表的集合,是按特定组织方式存储的相关数据集合。MySQL中数据存储层级为:MySQL服务 → 数据库 → 数据表 → 行(记录)+ 列(字段)。
- DBMS(数据库管理系统) :操作和管理数据库的软件,核心功能包括:
- 建库与维护(建表、数据转储与恢复、重组、性能监视);
- 数据定义(定义数据结构、存储结构、保密模式);
- 数据操作(查询、统计、更新);
- 运行管理(并发控制、存取控制、维护);
- 通信(与Access、Office等软件交互)。
- DBS(数据库系统):人机系统,由硬件、操作系统、数据库、DBMS、应用软件和用户组成。用户可通过DBMS或应用程序操作数据库,DBA(数据库管理员)负责备份恢复、维护、用户管理。
2. 架构关联
数据库是LAMP/LNMP架构的核心组件:
- LAMP = Linux + Apache + MySQL/MariaDB + PHP;
- LNMP = Linux + Nginx + MySQL/MariaDB + PHP;
在企业架构中,数据库用于存储核心数据,例如微信的聊天文字/语音/视频、外卖平台的订单/支付/商家数据、游戏的玩家信息/装备/战绩。
二、数据库发展与分类
1. 发展历程
- 第一阶段(层次型/网状型):代表产品为IBM 1969年推出的IMS,数据通过复杂指针连接,结构不够直观。
- 第二阶段(关系型) :1970年IBM研究员E.F. Codd提出"关系模型",核心是将数据存于二维表(行/列),用数学集合和关系代数操作数据(选择、投影、连接),数据更易查询维护。
- 代表产品:IBM System R(首个关系模型实验性系统)、加州大学伯克利Ingres(衍生出PostgreSQL);
- 意义:推动SQL(结构化查询语言)成为主流,现代MySQL、Oracle、SQL Server均源于此。
- 第三阶段(新型数据库):特点是面向对象、开放性、多平台,采用SQL + NoSQL混合使用模式,代表产品有MariaDB、PostgreSQL、时序数据库Prometheus。
2. 两大核心类型对比
| 特点 | 关系型数据库 | 非关系型数据库(NoSQL) |
|---|---|---|
| 数据结构 | 二维表 | KV、文档、列式、图形等 |
| 优点 | 结构清晰、SQL通用、支持复杂查询 | 格式灵活、速度快、高扩展性、成本低 |
| 缺点 | 表结构固定、存在I/O瓶颈 | 无SQL支持、事务处理弱、复杂查询不足 |
| 代表产品 | MySQL、Oracle、PostgreSQL | Redis、MongoDB、HBase |
3. 选型思路
- 数据关系清晰、结构化场景:选关系型数据库;
- 高并发、非结构化、大数据实时计算场景:选非关系型数据库;
- 实际应用常混合使用(如Redis缓存+MySQL持久化)。
三、MySQL 5.7源码编译安装
1. 环境准备
-
安装依赖工具:
bashyum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake(gcc/gcc-c++:编译工具;ncurses/ncurses-devel:字符终端交互库;bison:语法分析器;cmake:MySQL编译工具)
-
创建MySQL专用用户:
bashuseradd -s /sbin/nologin mysql

2. 源码处理
-
解压源码包与boost包:
bashtar zxvf mysql-5.7.17.tar.gz -C /opt tar zxvf boost_1_59_0.tar.gz -C /usr/local/ mv /usr/local/boost_1_59_0 /usr/local/boost

3. 编译配置
-
进入源码目录:
bashcd /opt/mysql-5.7.17/ -
执行cmake配置(关键参数):
bashcmake \ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # 安装路径 -DMYSQL_UNIX_ADDR=/usr/local/mysql/mysql.sock \ # 监听套接字路径 -DSYSCONFDIR=/etc \ # 配置文件路径 -DSYSTEMD_PID_DIR=/usr/local/mysql \ # 进程文件路径 -DDEFAULT_CHARSET=utf8 \ # 默认字符集 -DDEFAULT_COLLATION=utf8_general_ci \ # 字符集校对规则 -DWITH_EXTRA_CHARSETS=all \ # 支持所有字符集 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ # 安装InnoDB引擎 -DWITH_ARCHIVE_STORAGE_ENGINE=1 \ # 安装ARCHIVE引擎 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ # 安装BLACKHOLE引擎 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 \ # 安装PERFSCHEMA引擎 -DMYSQL_DATADIR=/usr/local/mysql/data \ # 数据库文件路径 -DWITH_BOOST=/usr/local/boost \ # boost路径 -DWITH_SYSTEMD=1 # 支持systemctl管理 -
编译安装:
bashmake -j 4 && make install (根据CPU数量定)(注意:CMake出错需删除CMakeCache.txt后重新执行)

4. 配置优化
-
权限设置:
bashchown -R mysql:mysql /usr/local/mysql/ chown mysql:mysql /etc/my.cnf -
修改配置文件
/etc/my.cnf:ini[client] port = 3306 socket=/usr/local/mysql/mysql.sock default-character-set=utf8 [mysqld] user = mysql basedir=/usr/local/mysql datadir=/usr/local/mysql/data port = 3306 character-set-server=utf8 pid-file = /usr/local/mysql/mysqld.pid socket=/usr/local/mysql/mysql.sock bind-address = 0.0.0.0 # 允许任意IP连接 skip-name-resolve # 关闭DNS解析,提高连接速度 max_connections=2048 # 最大连接数 default-storage-engine=INNODB # 默认存储引擎 max_allowed_packet=16M # 最大数据包大小 server-id = 1 # 唯一ID(主从复制用) sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES,NO_AUTO_CREATE_USER,NO_AUTO_VALUE_ON_ZERO,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,PIPES_AS_CONCAT,ANSI_QUOTES [mysql] port = 3306 default-character-set=utf8 socket=/usr/local/mysql/mysql.sock auto-rehash # 命令行自动补全

5. 环境变量与初始化
-
设置环境变量:
bashecho "PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile source /etc/profile -
数据库初始化:
bashcd /usr/local/mysql/bin/ ./mysqld \ --initialize-insecure \ --user=mysql \ --basedir=/usr/local/mysql \ --datadir=/usr/local/mysql/data

6. 服务管理与登录
-
配置systemd服务:
bashcp /usr/local/mysql/usr/lib/systemd/system/mysqld.service /usr/lib/systemd/system/ systemctl daemon-reload systemctl start mysqld.service systemctl enable mysqld # 开机自启 netstat -anpt | grep 3306 # 验证端口 -
设置root密码与登录:
bashmysqladmin -u root -p password "123456" # 设置密码(初始无密码,直接回车) mysql -u root -p123456 # 登录


四、MySQL数据库管理操作
1. 基本操作
- 查看数据库 :
SHOW DATABASES;(显示所有数据库列表); - 切换数据库 :
USE 数据库名;(切换当前操作数据库); - 查看表 :
SHOW TABLES;(当前数据库)或SHOW TABLES IN 数据库名;(指定数据库); - 查看表结构 :
DESCRIBE 表名;(输出字段名、类型、是否为空、主键、默认值、额外属性)。
2. 常用数据类型
| 类型 | 说明 | 示例 |
|---|---|---|
| INT | 整型(存储整数) | id INT |
| FLOAT | 单精度浮点(4字节,小数) | score FLOAT |
| DOUBLE | 双精度浮点(8字节) | price DOUBLE |
| CHAR(n) | 固定长度字符(不足补空格) | name CHAR(10) |
| VARCHAR(n) | 可变长度字符(最大n个) | address VARCHAR(50) |
| TEXT | 文本类型 | description TEXT |
| IMAGE | 图片类型 | photo IMAGE |
| DECIMAL(p,s) | 精确数值(p总长度,s小数位) | salary DECIMAL(5,2) |
3. 文件存储结构
- MySQL数据目录:
/usr/local/mysql/data(每个数据库对应一个子目录); - MyISAM表:对应3个文件------.frm(表结构)、.MYD(数据)、.MYI(索引);
- InnoDB表 :
- 独享表空间:每表1个.ibd文件;
- 共享表空间:多表共用ibdata文件。
4. SQL语句分类及操作
(1)DDL(数据定义语言):管理数据库/表结构
-
创建数据库 :
CREATE DATABASE 数据库名;; -
创建表 :
sqlCREATE TABLE 表名 ( 字段1 数据类型 [约束条件], 字段2 数据类型 [约束条件], PRIMARY KEY (主键字段) # 主键约束 );示例:
sqlCREATE DATABASE szsx_school; USE szsx_school; CREATE TABLE yjs0805 ( id INT NOT NULL, # 非空约束 name CHAR(10) NOT NULL, score DECIMAL(5,2), passwd CHAR(48) DEFAULT '', # 默认值约束 PRIMARY KEY (id) # 主键 ); -
删除表 :
DROP TABLE 表名;或DROP TABLE 数据库名.表名;(不切换数据库); -
删除数据库 :
DROP DATABASE 数据库名;; -
修改表结构(ALTER) :
- 改表名:
ALTER TABLE 旧表名 RENAME 新表名;; - 增字段:
ALTER TABLE 表名 ADD 字段名 数据类型 [约束];; - 改字段名/类型:
ALTER TABLE 表名 CHANGE 旧列名 新列名 数据类型 [约束];或ALTER TABLE 表名 MODIFY COLUMN 字段名 数据类型;; - 删字段:
ALTER TABLE 表名 DROP 字段名;。
- 改表名:
(2)DML(数据操纵语言):管理表数据
- 插入数据 :
INSERT INTO 表名(字段1,字段2,...) VALUES (值1, 值2, ...);;
示例:INSERT INTO KY13 (id, name, score, passwd) VALUES (1,'zhangsan',70.5,PASSWORD('123456'));; - 更新数据 :
UPDATE 表名 SET 字段1=值1[,字段2=值2] WHERE 条件;;
示例:UPDATE KY13 SET passwd=PASSWORD('') WHERE name='zhangsan';; - 删除数据 :
DELETE FROM 表名 WHERE 条件;; - 清空表 :
DELETE FROM 表名;(可回滚,速度慢,自增ID不重置);TRUNCATE TABLE 表名;(不可回滚,速度快,自增ID重置)。
(3)DQL(数据查询语言):查询数据
- 基础查询:
SELECT 字段1,字段2 FROM 表名 WHERE 条件;或SELECT * FROM 表名;(查所有字段); - 限制结果:
SELECT * FROM 表名 LIMIT 起始行, 查询条数;(如LIMIT 2显示前2行,LIMIT 2,3从第2行起显3行); - 竖向显示:
SELECT * FROM 表名\G。
(4)DCL(数据控制语言):权限管理
- 授权 :
GRANT 权限列表 ON 数据库.表 TO '用户名'@'来源地址' IDENTIFIED BY '密码';;
示例:GRANT SELECT ON school.* TO 'zhangsan'@'localhost' IDENTIFIED BY 'abc123';(本地用户zhangsan获school库查询权);GRANT ALL PRIVILEGES ON *.* TO 'lisi'@'%' IDENTIFIED BY '123456';(任意IP用户lisi获所有权限); - 刷新权限 :
FLUSH PRIVILEGES;(授权后生效); - 查看授权 :
SHOW GRANTS FOR '用户名'@'来源地址';; - 撤销权限 :
REVOKE 权限列表 ON 数据库.表 FROM '用户名'@'来源地址';;
示例:REVOKE ALL ON *.* FROM 'lisi'@'%';。
5. 高级表操作
- 临时表 :
CREATE TEMPORARY TABLE 表名 (...);(仅存在于当前连接,连接关闭自动销毁,支持增删改查); - 克隆表 :
- 仅复制结构:
CREATE TABLE 新表 LIKE 旧表;(需手动插入数据:INSERT INTO 新表 SELECT * FROM 旧表;); - 复制结构+数据:
CREATE TABLE 新表 AS SELECT * FROM 旧表;。
- 仅复制结构:
6. 用户与权限管理
(1)用户操作
- 创建用户 :
CREATE USER '用户名'@'来源地址' IDENTIFIED BY '密码';(localhost本地登录,%任意IP登录); - 查看用户 :
USE mysql; SELECT User, Host, authentication_string FROM user;; - 删除用户 :
DROP USER '用户名'@'来源地址';; - 修改密码 :
- 当前用户:
SET PASSWORD = PASSWORD('新密码');; - 其他用户:
SET PASSWORD FOR '用户'@'来源地址' = PASSWORD('新密码');。
- 当前用户:
(2)忘记root密码处理
- 修改
/etc/my.cnf,在[mysqld]下添加:skip-grant-tables; - 重启服务:
systemctl restart mysqld,直接登录(mysql); - 修改密码:
UPDATE mysql.user SET AUTHENTICATION_STRING=PASSWORD('新密码') WHERE user='root'; FLUSH PRIVILEGES;; - 删除
skip-grant-tables,重启服务:systemctl restart mysqld。
7. 常用权限说明
| 权限 | 功能 |
|---|---|
| SELECT | 查询数据 |
| INSERT | 插入数据 |
| UPDATE | 修改数据 |
| DELETE | 删除数据 |
| CREATE | 创建数据库/表 |
| DROP | 删除数据库/表 |
| INDEX | 建立索引 |
| ALTER | 修改表结构 |
| EXECUTE | 执行存储过程 |
| ALL PRIVILEGES | 所有权限 |