目录
一、数据库概念解析
(一)数据库基础架构:数据如何有序存储?
1. 数据存储的最小单元:记录与列
- 记录(Record)
数据库表中的一行数据,相当于现实中的一个“对象实例”。
示例:学生信息表中(1, 王明, 男, 22, 汉, 计算机科学与技术)
是一条记录,完整描述一个学生的信息。
核心作用:每条记录必须唯一(通过主键保证),避免重复数据。 - 列(Column)/字段(Field)
记录中的单个属性,定义数据的类型和约束。
示例:“年龄”列只能存储整数,“性别”列只能是男/女
(通过域完整性约束实现)。
关键属性:数据类型(INT/VARCHAR/DATE)、是否允许空值(NULL/NOT NULL)、默认值(如注册时间默认当前日期)。
2. 表(Table):同类数据的二维表格
- 结构定义:由行(记录)和列(字段)组成,类似Excel表格,但支持复杂约束和关联。
-- 创建学生表(含主键和约束)
CREATE TABLE students (
student_id INT PRIMARY KEY, -- 主键:唯一标识学生
name VARCHAR(50) NOT NULL, -- 姓名非空
age TINYINT CHECK (age BETWEEN 18 AND 50), -- 年龄范围约束
gender ENUM('男', '女') -- 枚举类型,限制取值
);
- 与Excel的区别:支持事务(原子性操作)、外键关联、索引优化,适合高并发场景。
3. 数据库(Database)
- 逻辑分组:一个数据库可包含多个表,如“学校管理系统”包含
students
(学生表)、courses
(课程表)、scores
(成绩表)。 - 核心目标:
- 数据共享:多用户/应用程序同时访问。
- 最小冗余:通过外键关联避免重复存储(如专业名称仅存于
majors
表,学生表通过major_id
关联)。 - 数据独立:表结构修改不影响应用程序(逻辑独立性)。
4. 数据库管理系统(DBMS)
- 核心功能详解:
- 数据定义(DDL):创建/修改表结构(
CREATE TABLE
/ALTER TABLE
)、定义约束(主键/外键)。 - 数据操纵(DML):增删改查数据(
INSERT
/DELETE
/UPDATE
/SELECT
)。 - 数据控制(DCL):权限管理(
GRANT
/REVOKE
),如授予用户SELECT
权限但禁止DELETE
。 - 运行管理:
- 并发控制:解决多用户同时写数据的冲突(如事务锁机制)。
- 故障恢复:通过日志文件(redo log/undo log)在断电后还原数据。
- 主流DBMS对比:
类型 |
代表产品 |
优势场景 |
开源与否 |
关系型 |
MySQL |
中小型网站、Web应用 |
开源 |
企业级关系型 |
Oracle |
大型企业复杂业务 |
闭源 |
NoSQL |
MongoDB |
海量非结构化数据存储 |
开源 |
5. 数据库系统(DBS)
- 组成部分:
- 硬件:服务器(存储数据文件)、网络设备(支持远程访问)。
- 软件:操作系统(Linux/Windows)、DBMS(如MySQL)、应用程序(如Java开发的管理系统)。
- 用户:
- 管理员(DBA):负责安装配置、性能调优。
- 开发人员:通过SQL语句操作数据库。
- 普通用户:通过应用程序界面间接操作(如网页表单提交数据)。
(二)数据模型
1. 三代数据库模型对比
模型 |
数据结构 |
典型场景 |
优势 |
缺点 |
层次模型 |
树状结构(一对多) |
企业组织架构 |
结构清晰,适合单路径查询 |
不支持多对多关系 |
网状模型 |
图状结构(多对多) |
复杂关系(如订单-商品) |
支持复杂关联 |
开发难度高,约束零散 |
关系模型 |
二维表格 |
主流业务系统 |
简单易用(SQL语言),支持声明式查询 |
复杂查询效率需优化 |
2. 关系模型核心
- 主键(Primary Key)
- 定义:表中唯一标识一行数据的字段(或字段组合),不允许空值(
NULL
)。 - 分类:
- 自然主键:现实中存在的唯一标识(如学生的身份证号、商品的条形码)。
- 代理主键:人为创建的唯一标识(如自增整数
student_id
),避免自然主键过长或变更。
- 示例:学生表中
student_id
作为主键,确保无重复记录。
- 外键(Foreign Key)
- 作用:连接两个表,维护数据一致性。
- 示例:学生表
students
的major_id
字段关联专业表majors
的major_id
主键:
-- 创建学生表时定义外键
CREATE TABLE students (
student_id INT PRIMARY KEY,
major_id INT,
FOREIGN KEY (major_id) REFERENCES majors(major_id) -- 外键关联
);
- 约束规则:
- 从表(学生表)的外键值必须存在于主表(专业表)中,否则拒绝插入/更新(如不允许学生专业编号为999,因专业表无该编号)。
- 主表数据被删除前,需先删除从表中关联的数据(或设置级联删除)。
3. 数据完整性
- 实体完整性:主键非空且唯一,如学生表
student_id
不可为空,且不能有两个学生同号。 - 域完整性:列值符合定义的类型和范围,如“成绩”列必须在0-100之间,性别只能是
男/女
。 - 引用完整性:外键关联有效,如成绩表中的
student_id
必须存在于学生表中,避免“幽灵成绩”。 - 用户定义完整性:自定义规则,如“入职日期”必须晚于“出生日期”,通过
CHECK
约束或应用程序逻辑实现。
二、MySQL安装实战:从源码编译到二进制部署(步步拆解)
(一)编译安装
1. 环境准备
- 卸载冲突软件(如MariaDB)
# 检查是否已安装MariaDB
rpm -q mariadb # 若输出类似“mariadb-5.5.52-1.el7.x86_64”,则需要卸载
dnf remove mariadb -y # 强制卸载
为什么?:MariaDB是MySQL的分支,端口(3306)和服务名可能冲突,需彻底移除。
- 安装编译依赖包
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
关键依赖解释:
-
gcc/gcc-c++
:C/C++编译器,用于编译MySQL源码。 -
cmake
:跨平台编译工具,生成Makefile。 -
openssl-devel
:支持SSL加密连接(如HTTPS访问数据库)。
- 关闭安全屏障(SELinux和防火墙)
# 修改SELinux配置为禁用(永久生效,需重启后完全生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 # 临时关闭,立即生效
# 关闭防火墙(生产环境需谨慎,后续可单独配置端口放行)
systemctl disable --now firewalld # 禁用并停止firewalld服务
注意:生产环境中,建议通过firewall-cmd --add-port=3306/tcp --permanent
放行3306端口,而非直接关闭防火墙。
2. 安装CMake
- 下载最新稳定版(以3.16.2为例)
wget https://cmake.org/files/v3.16/cmake-3.16.2.tar.gz
tar zxf cmake-3.16.2.tar.gz # 解压
cd cmake-3.16.2 # 进入目录
- 编译安装
./configure # 生成配置文件
gmake # 编译(耗时约5-10分钟,取决于服务器性能)
gmake install # 安装到系统路径(默认/usr/local/bin/cmake)
- 验证安装:
cmake --version # 应输出“3.16.2”或更高版本
3. 准备Boost库
- 下载对应版本(MySQL 8.0.36匹配Boost 1.77.0)
wget http://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxf boost_1_77_0.tar.gz # 解压
mv boost_1_77_0 /usr/local/boost # 移动到固定目录
- 为什么需要Boost?:MySQL 5.7+使用Boost库中的某些组件(如线程管理),必须指定路径否则编译报错。
- 创建程序用户
groupadd mysql # 创建mysql用户组
useradd -M -s /sbin/nologin mysql -g mysql # 创建mysql用户,禁止登录系统
-
-M
:不创建用户主目录(减少安全风险)。 -
-s /sbin/nologin
:用户无法通过SSH登录,仅用于运行MySQL服务。
5. 解压源码并配置编译参数
- 解压MySQL源码
tar zxf mysql-8.0.36.tar.gz -C /usr/src # 解压到/usr/src目录
cd /usr/src/mysql-8.0.36 # 进入源码目录
mkdir build && cd build # 创建独立构建目录(避免污染源码)
- 配置CMake参数(关键选项详解)
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ # MySQL安装目录(所有可执行文件、库文件存放此处)
-DSYSCONFDIR=/etc \ # 配置文件路径(my.cnf将放在/etc目录)
-DMYSQL_DATADIR=/usr/local/mysql/data \ # 数据文件存储目录(表结构、数据文件在此处)
-DWITH_SSL=system \ # 使用系统自带的SSL库(非自研,更兼容)
-DENABLED_LOCAL_INFILE=ON \ # 允许从客户端本地文件导入数据(如LOAD DATA INFILE命令)
-DWITH_BOOST=/usr/local/boost \ # 指定Boost库路径(必须,否则编译失败)
-DDEFAULT_CHARSET=utf8 \ # 默认字符集(支持中文等多语言,避免乱码)
-DDEFAULT_COLLATION=utf8_general_ci \ # 排序规则(不区分大小写,如“a”和“A”视为相同)
-DWITH_EXTRA_CHARSETS=all \ # 安装所有额外字符集(如Latin1、UTF-8mb4等)
注意:若报错“Could not find Boost”,请检查Boost路径是否正确,或尝试升级Boost版本。
6. 编译与安装
make -j$(nproc) # 并行编译,$(nproc)获取CPU核心数(如4核则-j4,速度提升4倍)
make install # 安装到指定目录(约10分钟,需root权限)
- 可能的错误:
- 内存不足:提示“make: *** [thread_cond.o] Error 1”,建议增加swap空间或减少并行数(如
-j2
)。 - CMake版本过低:提示“CMake >= 3.10.0 is required”,需升级CMake到最新版。
7. 初始化配置
- 手动创建配置文件(MySQL 8.0+无默认模板)
vi /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 # 允许所有IP地址连接(生产环境建议绑定具体IP,如192.168.1.100)
skip-name-resolve # 禁用DNS解析,加快连接速度(避免客户端IP反向解析耗时)
port=3306 # 监听端口(默认3306,可修改为其他端口如3307)
basedir=/usr/local/mysql # 安装目录(与CMake配置一致)
datadir=/usr/local/mysql/data # 数据目录(与CMake配置一致)
max_connections=2048 # 最大连接数(根据服务器性能调整,默认151,高并发场景需增大)
character-set-server=utf8 # 服务端默认字符集(需与客户端一致,避免乱码)
default-storage-engine=INNODB # 默认存储引擎(支持事务和外键,推荐使用)
max_allowed_packet=16M # 允许的最大数据包大小(上传大文件时需调大,如64M)
- 初始化数据库(两种模式)
- 无密码模式(测试环境):
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 特点:root用户无密码,直接登录(不安全,仅用于开发)。
- 安全模式(生产环境):
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 特点:生成随机初始密码(如
Xr6:Gg*u8?/8
,需记录在日志中),需通过该密码登录后修改。
- 添加环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile # 将mysql命令添加到全局路径
source /etc/profile # 立即生效(无需重启)
8. 添加系统服务
- 复制服务脚本
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # 重命名为mysqld
chmod +x /etc/rc.d/init.d/mysqld # 赋予执行权限
- 创建systemd服务文件
vi /lib/systemd/system/mysqld.service # 写入以下内容
[Unit]
Description=MySQL Database Server # 服务描述
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 # 多用户模式下启动
- 重载systemd并启用服务
systemctl daemon-reload # 重新加载服务配置
systemctl enable mysqld # 设置开机自启动
systemctl start mysqld # 启动服务
- 验证启动状态
systemctl status mysqld # 查看状态(应显示active(running))
netstat -anpt | grep 3306 # 检查3306端口是否监听(tcp6 0 0 :::3306 :::* LISTEN)
(二)二进制安装
1. 环境准备
- 卸载冲突软件(如MariaDB)
# 检查是否已安装MariaDB
rpm -q mariadb # 若输出类似“mariadb-5.5.52-1.el7.x86_64”,则需要卸载
dnf remove mariadb -y # 强制卸载
为什么?:MariaDB是MySQL的分支,端口(3306)和服务名可能冲突,需彻底移除。
- 安装编译依赖包
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
关键依赖解释:
-
gcc/gcc-c++
:C/C++编译器,用于编译MySQL源码。 -
cmake
:跨平台编译工具,生成Makefile。 -
openssl-devel
:支持SSL加密连接(如HTTPS访问数据库)。
- 关闭安全屏障(SELinux和防火墙)
# 修改SELinux配置为禁用(永久生效,需重启后完全生效)
sed -i 's/SELINUX=enforcing/SELINUX=disabled/' /etc/selinux/config
setenforce 0 # 临时关闭,立即生效
# 关闭防火墙(生产环境需谨慎,后续可单独配置端口放行)
systemctl disable --now firewalld # 禁用并停止firewalld服务
注意:生产环境中,建议通过firewall-cmd --add-port=3306/tcp --permanent
放行3306端口,而非直接关闭防火墙。
2. 安装CMake
- 下载最新稳定版(以3.16.2为例)
wget https://cmake.org/files/v3.16/cmake-3.16.2.tar.gz
tar zxf cmake-3.16.2.tar.gz # 解压
cd cmake-3.16.2 # 进入目录
- 编译安装
./configure # 生成配置文件
gmake # 编译(耗时约5-10分钟,取决于服务器性能)
gmake install # 安装到系统路径(默认/usr/local/bin/cmake)
- 验证安装:
cmake --version # 应输出“3.16.2”或更高版本
3. 准备Boost库
- 下载对应版本(MySQL 8.0.36匹配Boost 1.77.0)
wget http://sourceforge.net/projects/boost/files/boost/1.77.0/boost_1_77_0.tar.gz
tar -zxf boost_1_77_0.tar.gz # 解压
mv boost_1_77_0 /usr/local/boost # 移动到固定目录
- 为什么需要Boost?:MySQL 5.7+使用Boost库中的某些组件(如线程管理),必须指定路径否则编译报错。
- 创建程序用户
groupadd mysql # 创建mysql用户组
useradd -M -s /sbin/nologin mysql -g mysql # 创建mysql用户,禁止登录系统
-
-M
:不创建用户主目录(减少安全风险)。 -
-s /sbin/nologin
:用户无法通过SSH登录,仅用于运行MySQL服务。
5. 解压二进制包并配置路径
tar xf mysql-8.0.36-linux-glibc2.28-x86_64.tar.xz # 解压二进制包
mv mysql-8.0.36-linux-glibc2.28-x86_64 /usr/local/mysql # 重命名并移动到固定目录
mkdir /usr/local/mysql/data # 创建数据目录
chown -R mysql:mysql /usr/local/mysql # 赋予mysql用户权限(关键:否则初始化报错)
6. 初始化数据库(自动生成随机密码)
cd /usr/local/mysql/bin # 进入二进制目录
./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 关键输出:
2025-03-19T13:28:30.473508Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: Xr6:Gg*u8?/8
- 临时密码需保存,首次登录必须使用该密码(注意:包含特殊字符,需用引号包裹)。
7. 初始化配置
- 手动创建配置文件(MySQL 8.0+无默认模板)
vi /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 # 允许所有IP地址连接(生产环境建议绑定具体IP,如192.168.1.100)
skip-name-resolve # 禁用DNS解析,加快连接速度(避免客户端IP反向解析耗时)
port=3306 # 监听端口(默认3306,可修改为其他端口如3307)
basedir=/usr/local/mysql # 安装目录(与CMake配置一致)
datadir=/usr/local/mysql/data # 数据目录(与CMake配置一致)
max_connections=2048 # 最大连接数(根据服务器性能调整,默认151,高并发场景需增大)
character-set-server=utf8 # 服务端默认字符集(需与客户端一致,避免乱码)
default-storage-engine=INNODB # 默认存储引擎(支持事务和外键,推荐使用)
max_allowed_packet=16M # 允许的最大数据包大小(上传大文件时需调大,如64M)
- 初始化数据库(两种模式)
- 无密码模式(测试环境):
/usr/local/mysql/bin/mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 特点:root用户无密码,直接登录(不安全,仅用于开发)。
- 安全模式(生产环境):
/usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data
- 特点:生成随机初始密码(如
Xr6:Gg*u8?/8
,需记录在日志中),需通过该密码登录后修改。
- 添加环境变量
echo "export PATH=$PATH:/usr/local/mysql/bin" >> /etc/profile # 将mysql命令添加到全局路径
source /etc/profile # 立即生效(无需重启)
8. 添加系统服务
- 复制服务脚本
cp /usr/local/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld # 重命名为mysqld
chmod +x /etc/rc.d/init.d/mysqld # 赋予执行权限
- 创建systemd服务文件
vi /lib/systemd/system/mysqld.service # 写入以下内容
[Unit]
Description=MySQL Database Server # 服务描述
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 # 多用户模式下启动
- 重载systemd并启用服务
systemctl daemon-reload # 重新加载服务配置
systemctl enable mysqld # 设置开机自启动
systemctl start mysqld # 启动服务
- 验证启动状态
systemctl status mysqld # 查看状态(应显示active(running))
netstat -anpt | grep 3306 # 检查3306端口是否监听(tcp6 0 0 :::3306 :::* LISTEN)
三、MySQL基础操作
(一)首次登录密码修改
1. 安全模式登录(带临时密码)
mysql -u root -p # 提示输入密码时,粘贴初始化生成的临时密码(如Xr6:Gg*u8?/8)
- 常见问题:
- 密码错误:检查是否复制了全部字符(包括特殊符号),注意大小写。
- 拒绝访问:确保
mysql
服务已启动,且用户root@localhost
存在(默认仅允许本地登录)。
2. 修改密码(两种方式)
- 方式1:使用ALTER USER(推荐)
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码123!';
-
mysql_native_password
:兼容旧版客户端(如Navicat),MySQL 8.0默认使用更安全的caching_sha2_password
,但部分客户端不支持,需显式指定。
- 方式2:通过SET PASSWORD(兼容旧版)
mysql> SET PASSWORD FOR 'root'@'localhost' = PASSWORD('新密码123!');
3. 退出客户端
mysql> EXIT; # 或QUIT; 或\q
(二)数据库与表操作
1. 数据库操作(DDL)
-- 查看所有数据库
SHOW DATABASES; # 输出包含information_schema(元数据)、mysql(系统表)等
-- 创建数据库(指定字符集)
CREATE DATABASE school_db CHARACTER SET utf8 COLLATE utf8_general_ci;
-- 切换数据库
USE school_db; # 后续操作针对school_db
-- 删除数据库(危险!谨慎使用)
DROP DATABASE IF EXISTS school_db;
2. 表操作
- 创建专业表(主表,含主键)
CREATE TABLE majors (
major_id INT PRIMARY KEY, -- 主键:专业编号
major_name VARCHAR(100) NOT NULL -- 专业名称非空
);
- 创建学生表(从表,含外键)
CREATE TABLE students (
student_id INT PRIMARY KEY AUTO_INCREMENT, -- 自增主键(插入时自动生成)
name VARCHAR(50) NOT NULL,
gender ENUM('男', '女') NOT NULL,
age TINYINT,
major_id INT,
FOREIGN KEY (major_id) REFERENCES majors(major_id) -- 外键关联专业表
);
-
AUTO_INCREMENT
:自动递增,避免手动输入重复ID。
- 插入数据(DML)
-- 插入专业数据
INSERT INTO majors (major_id, major_name) VALUES (1, '计算机科学与技术'), (2, '信息管理');
-- 插入学生数据(major_id需存在于majors表中,否则报错)
INSERT INTO students (name, gender, age, major_id) VALUES ('王明', '男', 22, 1);
- 查询数据(多表关联)
-- 内连接查询学生及其专业
SELECT s.student_id, s.name, m.major_name
FROM students s
INNER JOIN majors m ON s.major_id = m.major_id;
3. 数据修改与删除
-- 更新学生年龄
UPDATE students SET age = 23 WHERE student_id = 1;
-- 删除无效专业(需先删除学生表中关联的数据,否则外键约束拒绝删除)
DELETE FROM majors WHERE major_id = 999; -- 若存在学生关联该专业,报错!
-- 先删除学生数据再删专业(或设置级联删除)
DELETE FROM students WHERE major_id = 999;
DELETE FROM majors WHERE major_id = 999;
(三)权限管理
1. 授予远程访问权限
-- 创建用户'user1',允许从任意IP登录,密码'Password123!'
CREATE USER 'user1'@'%' IDENTIFIED WITH mysql_native_password BY 'Password123!';
-- 授予该用户对school_db数据库的所有权限
GRANT ALL PRIVILEGES ON school_db.* TO 'user1'@'%';
-- 刷新权限(立即生效)
FLUSH PRIVILEGES;
2. 回收权限
-- 回收user1对school_db的DELETE权限
REVOKE DELETE ON school_db.* FROM 'user1'@'%';
四、常见问题与解决方案
1. 安装报错:“No CMAKE_C_COMPILER could be found”
- 原因:未安装GCC编译器。
- 解决:执行
dnf install -y gcc gcc-c++
安装编译工具链。
2. 登录报错:“Access denied for user 'root'@'localhost'”
- 原因:密码错误或用户不存在。
- 解决:
- 检查
/usr/local/mysql/data/localhost.err
日志,获取正确的临时密码。 - 若忘记密码,通过安全模式重置:
systemctl stop mysqld # 停止服务
/usr/local/mysql/bin/mysqld_safe --skip-grant-tables & # 跳过权限检查
mysql -u root # 无密码登录
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码'; # 直接修改密码
3. 乱码问题:查询结果出现“????”
- 原因:字符集不一致(客户端、连接、服务端、表/列字符集不统一)。
- 解决:
- 检查当前连接字符集:
SHOW VARIABLES LIKE 'character_set_%';
- 在
my.cnf
中设置统一字符集(如utf8
),重启服务。 - 创建表时显式指定字符集:
CHARACTER SET utf8 COLLATE utf8_general_ci
。
五、总结
MySQL的优势:
- 轻量高效:适合中小型场景,资源占用低(对比Oracle的“庞然大物”)。
- 开源免费:企业无需授权费,社区文档丰富(官方文档+Stack Overflow)。
- 生态完善:支持LAMP/LNMP架构,无缝集成PHP/Python/Java,管理工具多样(Navicat、DataGrip、phpMyAdmin)。
通过本文的步骤,能顺利完成MySQL的安装与基础操作。数据库的核心是“数据有序”,而MySQL正是实现这一目标的强大工具。动手实践才是掌握的关键,创建自己的数据库,设计表结构,插入数据,尝试各种查询,在实践中积累经验.