MySQL常用命令大全:新手入门必须掌握的基本指令

原创 2025-07-04 10:15:24编程技术
475

MySQL作为全球最流行的开源关系型数据库管理系统,是Web开发、数据分析等领域的核心技术栈之一。掌握MySQL基础命令是数据库操作、性能优化和故障排查的基石。本文ZHANID工具网将从数据库连接、表管理、数据操作、索引优化、权限控制五大维度,系统梳理新手必学的100+核心命令,结合实际案例与常见问题解决方案,帮助读者快速构建完整的MySQL知识体系。

一、数据库连接与基础操作

1. 连接与断开数据库

-- 标准连接方式(需替换用户名、密码、数据库名)
mysql -u root -p123456 -h 127.0.0.1 -P 3306 mydatabase

-- 常用参数说明:
-- -u:用户名(root为超级管理员)
-- -p:密码(直接跟密码或回车后输入)
-- -h:主机地址(本地可省略)
-- -P:端口号(默认3306)

-- 断开连接
EXIT; -- 或 CTRL+D

常见问题

  • ERROR 1045 (28000):密码错误或用户无权限

  • ERROR 2003 (HY000):MySQL服务未启动或网络不通

2. 数据库级操作

-- 显示所有数据库
SHOW DATABASES;

-- 创建数据库(指定字符集避免乱码)
CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- 删除数据库(谨慎操作!)
DROP DATABASE IF EXISTS testdb;

-- 选择数据库
USE mydb;

最佳实践

  • 生产环境推荐使用utf8mb4字符集(支持emoji和完整Unicode)

  • 删除前用IF EXISTS避免报错

二、表结构管理

1. 表创建与删除

-- 创建表(完整语法示例)
CREATE TABLE users (
  id INT AUTO_INCREMENT PRIMARY KEY,
  username VARCHAR(50) NOT NULL UNIQUE,
  email VARCHAR(100) NOT NULL,
  age TINYINT UNSIGNED,
  created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
  updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

-- 删除表
DROP TABLE IF EXISTS temp_users;

关键字段说明

  • AUTO_INCREMENT:自增主键

  • UNIQUE:唯一约束

  • TIMESTAMP:自动时间戳

  • ENGINE:存储引擎(InnoDB支持事务)

2. 表结构修改

-- 添加列
ALTER TABLE users ADD COLUMN phone VARCHAR(20) AFTER email;

-- 修改列类型
ALTER TABLE users MODIFY COLUMN age SMALLINT UNSIGNED;

-- 删除列
ALTER TABLE users DROP COLUMN phone;

-- 重命名表
RENAME TABLE old_name TO new_name;

-- 查看表结构
DESCRIBE users; -- 或简写 DESC users
SHOW CREATE TABLE users; -- 查看完整建表语句

性能提示

  • 大表修改结构可能锁表,建议在低峰期操作

  • 使用pt-online-schema-change工具实现无锁改表

3. 数据类型选择指南

数据类型 存储大小 适用场景
TINYINT 1字节 布尔值/状态码(0-255)
INT 4字节 主键/常规数字ID
BIGINT 8字节 超大规模ID(如分布式系统)
VARCHAR(255) 变长 短文本(用户名、标题)
TEXT 64KB 长文章内容
DATETIME 8字节 精确到秒的时间(带时区)
TIMESTAMP 4字节 自动更新的时间(1970-2038)

三、数据操作(CRUD)

1. 插入数据

-- 单行插入
INSERT INTO users (username, email, age) 
VALUES ('john_doe', 'john@example.com', 28);

-- 多行插入
INSERT INTO users (username, email) VALUES 
('alice', 'alice@example.com'),
('bob', 'bob@example.com');

-- 从查询结果插入
INSERT INTO user_logs 
SELECT id, username, NOW() FROM users WHERE age > 30;

注意事项

  • 字符串需用单引号包裹

  • 非NULL列必须提供值或设置默认值

2. 查询数据

-- 基础查询
SELECT * FROM users LIMIT 10; -- 限制返回行数
SELECT username, email FROM users WHERE age BETWEEN 20 AND 30;

-- 条件查询
SELECT * FROM users 
WHERE username LIKE 'j%'   -- 以j开头
  OR email LIKE '%@gmail.com' -- 或gmail邮箱
ORDER BY age DESC;      -- 按年龄降序

-- 聚合查询
SELECT 
  COUNT(*) AS total_users,
  AVG(age) AS avg_age,
  MAX(created_at) AS latest_signup
FROM users;

-- 分组查询
SELECT age, COUNT(*) as count 
FROM users 
GROUP BY age 
HAVING count > 5; -- 对分组结果过滤

3. 连接查询(多表关联)

-- 内连接(交集)
SELECT u.username, o.order_id 
FROM users u 
JOIN orders o ON u.id = o.user_id;

-- 左外连接(保留左表全部记录)
SELECT u.username, COUNT(o.id) as order_count
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
GROUP BY u.id;

-- 自连接(树形结构查询)
SELECT e1.name AS employee, e2.name AS manager
FROM employees e1
JOIN employees e2 ON e1.manager_id = e2.id;

4. 更新与删除数据

-- 更新数据
UPDATE users 
SET age = 30, updated_at = NOW()
WHERE username = 'john_doe';

-- 条件更新(慎用!)
UPDATE products 
SET stock = stock - 1 
WHERE id = 123 AND stock > 0; -- 防止超卖

-- 删除数据
DELETE FROM user_logs 
WHERE created_at < DATE_SUB(NOW(), INTERVAL 1 YEAR); -- 清理一年前日志

-- 清空表(比DELETE快,不触发触发器)
TRUNCATE TABLE temp_data;

安全建议

  • 执行UPDATE/DELETE前先用SELECT测试条件

  • 生产环境建议使用事务包裹关键操作

mysql.webp

四、索引与性能优化

1. 索引管理

-- 创建索引
CREATE INDEX idx_user_email ON users(email); -- 单列索引
CREATE UNIQUE INDEX idx_user_uname ON users(username); -- 唯一索引
CREATE INDEX idx_user_name_age ON users(username, age); -- 复合索引

-- 删除索引
DROP INDEX idx_user_email ON users;

-- 查看索引
SHOW INDEX FROM users;

索引设计原则

  • 高选择性列(如用户名)适合建索引

  • 避免过度索引(每个额外索引降低写入性能)

  • 复合索引遵循最左前缀原则

2. 查询性能分析

-- 执行计划分析
EXPLAIN SELECT * FROM users WHERE username = 'john_doe';

-- 慢查询日志配置(my.cnf)
[mysqld]
slow_query_log = 1
slow_query_log_file = /var/log/mysql/mysql-slow.log
long_query_time = 2 -- 记录超过2秒的查询

-- 性能监控命令
SHOW STATUS LIKE 'Com_select'; -- 查看查询次数
SHOW PROCESSLIST;        -- 查看当前连接

EXPLAIN关键字段解读

  • type:访问类型(ALL全表扫描 < index索引扫描 < range范围扫描 < ref/eq_ref唯一索引扫描)

  • key:实际使用的索引

  • rows:预估扫描行数

3. 常用优化技巧

-- 避免SELECT *
SELECT id, username FROM users; -- 只查询必要字段

-- 使用覆盖索引
SELECT username FROM users WHERE email = 'john@example.com'; -- 若email和username有复合索引

-- 分页优化(避免大偏移量)
SELECT * FROM users ORDER BY id LIMIT 10000, 20; -- 低效
SELECT * FROM users WHERE id > 10000 ORDER BY id LIMIT 20; -- 高效(需记录上次最大ID)

五、用户与权限管理

1. 用户管理

-- 创建用户
CREATE USER 'app_user'@'%' IDENTIFIED BY 'SecurePass123!';
-- '%'表示允许任何主机连接,生产环境建议指定IP

-- 修改密码
ALTER USER 'app_user'@'%' IDENTIFIED BY 'NewPass456!';

-- 删除用户
DROP USER IF EXISTS 'temp_user'@'localhost';

2. 权限控制

-- 授予权限(精细控制到库/表/列)
GRANT SELECT, INSERT ON mydb.users TO 'app_user'@'%';
GRANT ALL PRIVILEGES ON mydb.* TO 'admin'@'localhost';

-- 刷新权限
FLUSH PRIVILEGES;

-- 撤销权限
REVOKE DELETE ON mydb.* FROM 'app_user'@'%';

-- 查看用户权限
SHOW GRANTS FOR 'app_user'@'%';

权限类型说明

  • SELECT, INSERT, UPDATE, DELETE:数据操作权限

  • CREATE, ALTER, DROP:结构修改权限

  • GRANT OPTION:允许用户授权给其他用户

3. 安全最佳实践

  1. 最小权限原则:只授予必要的权限

  2. 密码策略:使用强密码(长度≥12,含大小写、数字、特殊字符)

  3. 禁止root远程登录

    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');
    FLUSH PRIVILEGES;
  4. 定期审计:通过mysql.user表和慢查询日志监控异常行为

六、备份与恢复

1. 逻辑备份(SQL格式)

# 使用mysqldump备份单个数据库
mysqldump -u root -p mydb > mydb_backup.sql

# 备份所有数据库
mysqldump -u root -p --all-databases > full_backup.sql

# 仅备份结构(无数据)
mysqldump -u root -p --no-data mydb > mydb_structure.sql

2. 物理备份(直接复制文件)

前提条件

  • MySQL服务停止或使用--single-transaction(InnoDB)

  • 备份目录:

    • 数据目录:/var/lib/mysql/(Linux默认)

    • 配置文件:/etc/my.cnf/etc/mysql/my.cnf

3. 恢复数据

# 从SQL文件恢复
mysql -u root -p mydb < mydb_backup.sql

# 恢复单个表(需先创建数据库)
mysql -u root -p mydb < users_table.sql

生产环境建议

  • 定期测试备份文件的可恢复性

  • 使用Percona XtraBackup实现热备份(无需停机)

七、高级功能速查

1. 存储过程与函数

-- 创建存储过程
DELIMITER //
CREATE PROCEDURE GetUserOrders(IN userId INT)
BEGIN
  SELECT * FROM orders WHERE user_id = userId;
END //
DELIMITER ;

-- 调用存储过程
CALL GetUserOrders(123);

-- 创建函数
CREATE FUNCTION CalculateAge(birth DATE) 
RETURNS INT
DETERMINISTIC
BEGIN
  RETURN TIMESTAMPDIFF(YEAR, birth, CURDATE());
END;

2. 事务控制

START TRANSACTION; -- 或 BEGIN
INSERT INTO orders (...) VALUES (...);
UPDATE inventory SET stock = stock - 1 WHERE product_id = 123;
COMMIT; -- 或 ROLLBACK 回滚

3. 视图(Virtual Tables)

-- 创建视图
CREATE VIEW active_users AS
SELECT id, username FROM users WHERE last_login > DATE_SUB(NOW(), INTERVAL 30 DAY);

-- 查询视图
SELECT * FROM active_users WHERE age > 25;

八、常见问题解决方案

1. 忘记root密码

  1. 停止MySQL服务

  2. 启动时跳过权限表:

    mysqld_safe --skip-grant-tables &
  3. 连接MySQL并更新密码:

    UPDATE mysql.user SET authentication_string=PASSWORD('NewPass') WHERE User='root';
    FLUSH PRIVILEGES;
  4. 重启MySQL服务

2. 解决"Too many connections"错误

-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';

-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';

-- 临时增加连接数(重启失效)
SET GLOBAL max_connections = 500;

-- 永久修改(my.cnf)
[mysqld]
max_connections = 500

3. 修复崩溃的表

# 使用mysqlcheck工具
mysqlcheck -u root -p --auto-repair --optimize mydb users

# 或进入MySQL执行
REPAIR TABLE users;

九、总结与学习路径

核心命令掌握程度自查表

类别 掌握要求
连接与基础操作 熟练连接、创建/删除数据库
表管理 精通DDL语句,能设计合理表结构
CRUD操作 熟练编写复杂查询,理解连接类型
索引与优化 能分析执行计划,设计有效索引
权限管理 理解权限体系,能配置最小权限账户
备份恢复 掌握mysqldump使用,了解物理备份

进阶学习建议

  1. 官方文档MySQL 8.0 Reference Manual

  2. 实战平台

  3. 性能优化

    • 阅读《高性能MySQL》

    • 学习EXPLAIN深入分析

掌握这些基础命令后,读者已具备独立开发简单应用数据库的能力。建议通过实际项目巩固知识,逐步探索事务隔离级别、分布式架构等高级主题。MySQL的深度与广度足以支撑从个人博客到大型互联网应用的各类场景,持续学习与实践是成为数据库专家的必经之路。

mysql常用命令 mysql命令 mysql
THE END
战地网
频繁记录吧,生活的本意是开心

相关推荐

如何在 MySQL 中实现定时任务?Event Scheduler 全攻略
MySQL 自5.1.6版本起内置的 Event Scheduler(事件调度器) 功能,允许直接在数据库层面实现定时任务调度,无需依赖外部工具如Cron或Quartz。本文ZHANID工具网将系统梳理Even...
2025-09-15 编程技术
556

Java 与 MySQL 性能优化:MySQL全文检索查询优化实践
本文聚焦Java与MySQL协同环境下的全文检索优化实践,从索引策略、查询调优、参数配置到Java层优化,深入解析如何释放全文检索的潜力,为高并发、大数据量场景提供稳定高效的搜...
2025-09-13 编程技术
535

Java与MySQL数据库连接实战:JDBC使用教程
JDBC(Java Database Connectivity)作为Java标准API,为开发者提供了统一的数据访问接口,使得Java程序能够无缝连接各类关系型数据库。本文ZHANID工具网将以MySQL数据库为例...
2025-09-11 编程技术
512

MySQL数据类型使用场景详解:INT、VARCHAR、DATE、TEXT等核心类型实战指南
在MySQL数据库设计中,数据类型的选择直接影响存储效率、查询性能和数据完整性。本文ZHANID工具网聚焦INT、VARCHAR、DATE、TEXT等常用数据类型,通过存储特性对比、典型应用场...
2025-09-11 编程技术
513

MySQL基础语法大全:SELECT、INSERT、UPDATE、DELETE使用详解
MySQL作为最流行的开源关系型数据库管理系统,其核心操作围绕数据增删改查(CRUD)展开。本文ZHANID工具网将系统解析SELECT、INSERT、UPDATE、DELETE四大基础语句的语法规范、...
2025-09-09 编程技术
505

MySQL修改字段长度提示“Too large column size”怎么办?
当尝试修改MySQL字段长度时遇到“Too large column size”错误,通常是由于字段长度超过MySQL引擎限制或索引约束导致。本文ZHANID工具网将系统梳理错误原因、诊断方法及解决方...
2025-09-08 编程技术
509