MySQL的相关内容

一、MySQL 常用 SQL 语句的语法规范清单

操作类型 语法示例 规范说明
数据库操作 CREATE DATABASE IF NOT EXISTS test_db DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; 1. 关键字大写(可读性更佳);2. 建议指定字符集 / 排序规则;3. 用IF NOT EXISTS避免重复创建
DROP DATABASE IF EXISTS test_db; 删库前加IF EXISTS,避免不存在时报错
USE test_db; 切换数据库,语句结尾必须加分号
表操作 CREATE TABLE IF NOT EXISTS user (``id INT PRIMARY KEY AUTO_INCREMENT COMMENT '主键',``name VARCHAR(50) NOT NULL COMMENT '姓名',``age TINYINT UNSIGNED DEFAULT 0 COMMENT '年龄'``) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; 1. 指定存储引擎(InnoDB 为默认);2. 字段加注释;3. 数值类型合理选择(如 age 用 TINYINT);4. 主键建议自增
ALTER TABLE user ADD COLUMN phone VARCHAR(11) AFTER name; 新增字段指定位置,避免默认加在最后
DROP TABLE IF EXISTS user; 删表前加IF EXISTS
数据操作 INSERT INTO user (name, age) VALUES ('张三', 20), ('李四', 25); 1. 显式指定字段列;2. 批量插入用逗号分隔;3. 字符串值用单引号
SELECT id, name FROM user WHERE age > 18 ORDER BY age DESC LIMIT 10; 1. 避免SELECT *,只查需要的字段;2. WHERE 条件加索引字段;3. 排序 / 分页明确
UPDATE user SET age = 21 WHERE id = 1; 1. 必须加 WHERE 条件(否则全表更新);2. 优先用主键作为更新条件
DELETE FROM user WHERE id = 1; 1. 必须加 WHERE 条件;2. 批量删除慎用,建议先查询验证
权限操作 GRANT SELECT, INSERT ON test_db.* TO 'test_user'@'%' IDENTIFIED BY 'TestPass@123'; 1. 权限最小化(只授需要的权限);2. 限制访问主机(% 为所有主机,建议指定 IP);3. 密码符合复杂度
FLUSH PRIVILEGES; 权限修改后需刷新生效

二、MySQL 命令行操作的常用指令清单

指令分类 指令示例 说明
登录退出 mysql -uroot -p 本地登录,-p 后回车输入密码(避免明文)
mysql -uroot -p123456 -h192.168.1.100 -P3307 远程登录,指定主机 (-h)、端口 (-P)
exit; / quit; 退出 MySQL 命令行
基础查询 SHOW DATABASES; 查看所有数据库
SHOW TABLES; 查看当前数据库下的表
DESC user; / DESCRIBE user; 查看表结构
SHOW CREATE TABLE user; 查看表的创建语句(含索引、引擎等)
SELECT VERSION(); 查看 MySQL 版本
SELECT NOW(); 查看当前时间
权限 / 用户 SELECT USER(), CURRENT_USER(); 查看当前登录用户
SHOW GRANTS FOR 'root'@'localhost'; 查看用户权限
DROP USER IF EXISTS 'test_user'@'%'; 删除用户
数据库管理 SOURCE D:/sql/init.sql; 执行外部 SQL 文件
SET NAMES utf8mb4; 设置客户端字符集

三、MySQL 命令行操作的常见错误及解决清单

错误类型 错误提示 解决方法
登录错误 ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) 1. 核对密码是否正确;2. 密码含特殊字符时确保输入准确;3. 重置 root 密码
ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) 1. 检查 MySQL 服务是否启动;2. 验证 3306 端口是否被占用;3. 关闭防火墙 / 安全软件
SQL 语法错误 ERROR 1064 (42000): You have an error in your SQL syntax; check the manual... 1. 检查语句结尾是否加分号;2. 关键字拼写错误(如ALTER写成ALTERR);3. 引号 / 括号配对错误;4. 字段 / 表名含特殊字符时加反引号(`)
权限错误 ERROR 1142 (42000): SELECT command denied to user 'test'@'localhost' for table 'user' 1. 给用户授予对应权限(GRANT SELECT ON test_db.user TO 'test'@'localhost');2. 刷新权限(FLUSH PRIVILEGES
表 / 库不存在 ERROR 1049 (42000): Unknown database 'test_db' 1. 检查数据库名称拼写;2. 先执行USE切换到正确数据库;3. 确认数据库已创建
ERROR 1146 (42S02): Table 'test_db.user' doesn't exist 1. 检查表名拼写;2. 确认表在当前数据库下
端口占用 ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) 1. 执行 `netstat -ano

四、MySQL 8.4.7 的标准 my.ini 配置模板

bash 复制代码
[mysqld]
# 基础配置
port = 3306                      # 端口
basedir = F:\mysql-8.4.7-winx64  # MySQL安装目录(替换为实际路径)
datadir = F:\mysql-8.4.7-winx64\data  # 数据目录(需为空文件夹)
socket = F:\mysql-8.4.7-winx64\mysql.sock  # 套接字文件(Windows可忽略)
pid-file = F:\mysql-8.4.7-winx64\mysql.pid  # PID文件

# 字符集配置
character-set-server = utf8mb4   # 服务器字符集(兼容emoji)
collation-server = utf8mb4_general_ci  # 排序规则
lc-messages-dir = F:\mysql-8.4.7-winx64\share  # 错误信息文件目录
lc-messages = en_US              # 错误信息语言

# 连接配置
max_connections = 200            # 最大连接数
connect_timeout = 10             # 连接超时时间(秒)
wait_timeout = 28800             # 非交互连接超时时间
interactive_timeout = 28800      # 交互连接超时时间

# 存储引擎配置
default-storage-engine = InnoDB  # 默认存储引擎
innodb_buffer_pool_size = 512M   # InnoDB缓冲池大小(建议为内存的50%-70%)
innodb_log_file_size = 128M      # 日志文件大小
innodb_log_buffer_size = 32M     # 日志缓冲区大小
innodb_flush_log_at_trx_commit = 1  # 事务提交时刷新日志(1为最安全)

# 安全配置
sql_mode = STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION  # 严格模式
validate_password.policy = MEDIUM  # 密码复杂度策略(LOW/MEDIUM/STRONG)
validate_password.length = 8       # 密码最小长度

[mysql]
# 客户端配置
default-character-set = utf8mb4  # 客户端字符集
prompt = \\u@\\h [\\d] >_        # 命令行提示符(显示用户@主机 [数据库])

[client]
port = 3306
default-character-set = utf8mb4
user = root  # 可选,避免每次登录输入用户名

五、MySQL 服务管理与密码重置的常用指令清单

操作类型 指令示例 说明
服务管理(Windows) net start mysql 启动 MySQL 服务
net stop mysql 停止 MySQL 服务
sc query mysql 查看服务状态
mysqld --install 安装服务(默认名 mysql)
mysqld --install MySQL84 安装服务并指定服务名(如 MySQL84)
mysqld --remove 删除服务
服务管理(Linux) systemctl start mysqld 启动服务
systemctl stop mysqld 停止服务
systemctl restart mysqld 重启服务
systemctl enable mysqld 设置开机自启
systemctl status mysqld 查看服务状态
密码重置(通用) mysqld --console --skip-grant-tables --shared-memory Windows 无权限启动 MySQL(跳过密码验证)
mysqld_safe --skip-grant-tables & Linux 无权限启动 MySQL
mysql -uroot 无密码登录
FLUSH PRIVILEGES; 刷新权限
ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123'; 修改 root 密码

六、MySQL 服务启动失败的日志分析指南

1. 日志位置
  • Windows:datadir目录下的主机名.err文件(如DESKTOP-XXXX.err);
  • Linux:/var/log/mysqld.log
  • 若未找到,在my.ini/my.cnf中配置:log_error = F:\mysql-8.4.7-winx64\data\mysql_error.log
2. 核心错误关键词及解决
日志关键词 错误原因 解决方法
Can't find error-message file 错误信息文件路径错误 配置lc-messages-dir指向当前版本的share目录
initialize specified but the data directory has files in it 数据目录非空 清空datadir目录后重新初始化
InnoDB: The innodb_system data file 'ibdata1' must be writable 数据目录权限不足 Windows:给目录添加当前用户 "完全控制" 权限;Linux:chown -R mysql:mysql /var/lib/mysql
Port 3306 is in use by another process 端口被占用 结束占用进程或修改 MySQL 端口
my.ini: unknown variable 'xxx' 配置文件参数错误 检查参数拼写 / 版本兼容性(如 MySQL8.0 移除query_cache_size
System error 1067 配置错误 / 数据目录损坏 1. 核对basedir/datadir路径;2. 重新初始化数据目录
3. 分析步骤
  1. 打开错误日志文件,定位[ERROR]/[CRITICAL]标记的行;
  2. 提取错误关键词,匹配上表解决;
  3. 若日志无明确错误,尝试重新初始化(清空datadirmysqld --initialize --console),查看控制台输出。

七、MySQL 首次使用的基础操作清单

操作步骤 操作指令 / 说明
1. 验证安装 mysql -uroot -p → 输入密码登录;SELECT VERSION(); → 查看版本
2. 修改初始密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';
3. 创建数据库 CREATE DATABASE test_db DEFAULT CHARSET utf8mb4;
4. 切换数据库 USE test_db;
5. 创建测试表 CREATE TABLE user (``id INT PRIMARY KEY AUTO_INCREMENT,``name VARCHAR(50) NOT NULL,``age TINYINT UNSIGNED``) ENGINE=InnoDB;
6. 插入测试数据 INSERT INTO user (name, age) VALUES ('张三', 20), ('李四', 25);
7. 查询数据 SELECT * FROM user WHERE age > 18;
8. 修改数据 UPDATE user SET age = 21 WHERE id = 1;
9. 删除数据 DELETE FROM user WHERE id = 2;
10. 创建普通用户 CREATE USER 'test_user'@'%' IDENTIFIED BY 'TestPass@123';
11. 授予权限 GRANT SELECT, INSERT ON test_db.* TO 'test_user'@'%';
12. 刷新权限 FLUSH PRIVILEGES;

八、MySQL root 密码重置的详细操作手册(Windows 版)

步骤 1:停止 MySQL 服务

cmd

复制代码
net stop mysql
步骤 2:以无权限验证模式启动 MySQL
  1. 以管理员身份打开 CMD,进入 MySQL 的bin目录:

    cmd

    复制代码
    F:
    cd mysql-8.4.7-winx64\bin
  2. 执行无权限启动命令: cmd

    复制代码
    mysqld --console --skip-grant-tables --shared-memory

    ✅ 提示:该窗口需保持打开,不可关闭。

步骤 3:无密码登录 MySQL
  1. 新开一个 CMD 窗口,进入bin目录,执行:

    cmd

    复制代码
    mysql -uroot
  2. 成功进入 MySQL 交互界面(无密码验证)。

步骤 4:修改 root 密码
  1. 刷新权限(必须执行): sql

    复制代码
    FLUSH PRIVILEGES;
  2. 修改密码(符合复杂度要求): sql

    复制代码
    ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123';
  3. 再次刷新权限: sql

    复制代码
    FLUSH PRIVILEGES;
  4. 退出 MySQL: sql

    复制代码
    exit;
步骤 5:重启 MySQL 服务
  1. 关闭无权限启动的 CMD 窗口(步骤 2 的窗口);

  2. 停止并重启服务:

    cmd

    复制代码
    net stop mysql
    net start mysql
步骤 6:验证登录

cmd

复制代码
mysql -uroot -p
# 输入新密码NewPass@123,登录成功即重置完成

九、MySQL 本地连接故障的排查流程图

十、MySQL 服务状态管理的常用命令清单

系统 命令 功能
Windows sc query mysql 查看服务详细状态(运行 / 停止 / 启动类型)
net start mysql 启动服务
net stop mysql 停止服务
net restart mysql 重启服务(部分系统不支持,需先 stop 再 start)
sc config mysql start= auto 设置服务开机自启
sc config mysql start= manual 设置服务手动启动
`tasklist findstr mysqld` 查看 MySQL 进程是否运行
Linux systemctl status mysqld 查看服务状态(含最近日志)
systemctl start mysqld 启动服务
systemctl stop mysqld 停止服务
systemctl restart mysqld 重启服务
systemctl enable mysqld 开机自启
systemctl disable mysqld 关闭开机自启
`ps -ef grep mysqld` 查看 MySQL 进程
`netstat -tulpn grep 3306` 查看 3306 端口监听状态
相关推荐
思成不止于此2 小时前
【MySQL 零基础入门】DQL 核心语法(一):学生表基础查询与聚合函数篇
数据库·笔记·学习·mysql
nbsaas-boot2 小时前
MySQL 中如何实现类似 SQL Server SELECT INTO 的表复制能力(生产级实践指南)
数据库·mysql
独泪了无痕2 小时前
COALESCE函数:处理NULL值的利器
sql·mysql·函数式编程
2503_930123932 小时前
Redis群集的三种模式详解
数据库·redis·缓存
云和数据.ChenGuang2 小时前
openEuler 上安装与部署 Redis 的完整技术教程
数据库·redis·缓存
二营长13 小时前
线上系统mysql数据库突然sql执行不出来记录
数据库·sql·mysql
翔云 OCR API3 小时前
企业工商信息查验API-快速核验企业信息-营业执照文字识别接口
前端·数据库·人工智能·python·mysql
数据库学啊3 小时前
性价比高的车联网时序数据库哪个靠谱
数据库·时序数据库
关于不上作者榜就原神启动那件事3 小时前
Redis学习文档
数据库·redis·学习