当前位置: 首页 > news >正文

MySQL常用命令完整指南

在这里插入图片描述

前言:

MySQL常用命令的集合,方便查询和使用

  • 平时大量的使用navicat、DBeaver类的工具给我胃口养刁了,有时候切换到服务器上去使用命令操作数据库,有些命令就忘了
  • 所以总结了一下,方便记忆与查询

目录概要

  • 1. 数据库连接和管理
  • 2. 数据库操作命令
  • 3. 数据表操作命令
  • 4. 数据查询命令
  • 5. 数据修改命令
  • 6. 索引管理命令
  • 7. 用户权限管理
  • 8. 备份与恢复
  • 9. 性能优化命令
  • 10. 系统信息查看
  • 11. MySQL操作流程图

1. 数据库连接和管理

1.1 连接MySQL服务器

命令格式:

mysql -h [主机名] -P [端口号] -u [用户名] -p[密码] [数据库名]

重要参数:

  • -h : 指定主机名(默认localhost)
  • -P : 指定端口号(默认3306)
  • -u : 指定用户名
  • -p : 提示输入密码(注意p后面不要有空格)
  • -D : 指定默认数据库

代码示例:

# 连接本地MySQL
mysql -u root -p# 连接远程MySQL
mysql -h 192.168.1.100 -P 3306 -u admin -p# 连接并指定数据库
mysql -u root -p -D mydb

1.2 退出MySQL

-- 方式一
EXIT;-- 方式二
QUIT;-- 方式三
\q

2. 数据库操作命令

2.1 查看数据库

-- 显示所有数据库
SHOW DATABASES;-- 显示数据库创建语句
SHOW CREATE DATABASE database_name;

2.2 创建数据库

命令格式:

CREATE DATABASE [IF NOT EXISTS] database_name 
[CHARACTER SET charset_name] 
[COLLATE collation_name];

代码示例:

-- 创建数据库
CREATE DATABASE mycompany;-- 创建数据库并指定字符集
CREATE DATABASE mycompany 
CHARACTER SET utf8mb4 
COLLATE utf8mb4_unicode_ci;-- 避免重复创建
CREATE DATABASE IF NOT EXISTS mycompany;

2.3 选择和删除数据库

-- 选择数据库
USE database_name;-- 删除数据库
DROP DATABASE [IF EXISTS] database_name;-- 示例
USE mycompany;
DROP DATABASE IF EXISTS old_database;

3. 数据表操作命令

3.1 查看表信息

-- 显示当前数据库的所有表
SHOW TABLES;-- 显示表结构
DESC table_name;
-- 或者
DESCRIBE table_name;
-- 或者
SHOW COLUMNS FROM table_name;-- 显示表的创建语句
SHOW CREATE TABLE table_name;-- 显示表的状态信息
SHOW TABLE STATUS LIKE 'table_name';

3.2 创建数据表

命令格式:

CREATE TABLE [IF NOT EXISTS] table_name (column1 datatype [constraints],column2 datatype [constraints],...[PRIMARY KEY (column_name)],[FOREIGN KEY (column_name) REFERENCES other_table(column_name)]
) [ENGINE=storage_engine] [CHARACTER SET charset];

重要数据类型:

  • INT(size) : 整数类型
  • VARCHAR(size) : 可变长字符串
  • CHAR(size) : 固定长字符串
  • TEXT : 长文本
  • DATE : 日期 (YYYY-MM-DD)
  • DATETIME : 日期时间 (YYYY-MM-DD HH:MM:SS)
  • TIMESTAMP : 时间戳
  • DECIMAL(p,s) : 精确小数

重要约束:

  • NOT NULL : 非空约束
  • UNIQUE : 唯一约束
  • PRIMARY KEY : 主键约束
  • FOREIGN KEY : 外键约束
  • AUTO_INCREMENT : 自动递增
  • DEFAULT value : 默认值

代码示例:

-- 创建用户表
CREATE TABLE users (id INT AUTO_INCREMENT PRIMARY KEY,username VARCHAR(50) NOT NULL UNIQUE,email VARCHAR(100) NOT NULL,password VARCHAR(255) NOT NULL,age INT DEFAULT 0,created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP,updated_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
);-- 创建订单表
CREATE TABLE orders (order_id INT AUTO_INCREMENT PRIMARY KEY,user_id INT NOT NULL,product_name VARCHAR(100) NOT NULL,quantity INT DEFAULT 1,price DECIMAL(10,2) NOT NULL,order_date DATE NOT NULL,FOREIGN KEY (user_id) REFERENCES users(id)
) ENGINE=InnoDB CHARACTER SET utf8mb4;

3.3 修改表结构

-- 添加列
ALTER TABLE table_name ADD COLUMN column_name datatype [constraints];-- 修改列
ALTER TABLE table_name MODIFY COLUMN column_name new_datatype;-- 重命名列
ALTER TABLE table_name CHANGE old_column_name new_column_name datatype;-- 删除列
ALTER TABLE table_name DROP COLUMN column_name;-- 重命名表
ALTER TABLE old_table_name RENAME TO new_table_name;-- 示例
ALTER TABLE users ADD COLUMN phone VARCHAR(20);
ALTER TABLE users MODIFY COLUMN age TINYINT;
ALTER TABLE users CHANGE age user_age INT;
ALTER TABLE users DROP COLUMN phone;

3.4 删除表

-- 删除表
DROP TABLE [IF EXISTS] table_name;-- 清空表数据但保留结构
TRUNCATE TABLE table_name;-- 示例
DROP TABLE IF EXISTS temp_table;
TRUNCATE TABLE logs;

4. 数据查询命令

4.1 基本SELECT语句

命令格式:

SELECT [DISTINCT] column1, column2, ...
FROM table_name
[WHERE condition]
[GROUP BY column_name]
[HAVING condition]
[ORDER BY column_name [ASC|DESC]]
[LIMIT offset, count];

代码示例:

-- 查询所有数据
SELECT * FROM users;-- 查询指定列
SELECT username, email FROM users;-- 条件查询
SELECT * FROM users WHERE age > 18;-- 模糊查询
SELECT * FROM users WHERE username LIKE 'john%';-- 范围查询
SELECT * FROM users WHERE age BETWEEN 18 AND 65;-- 多条件查询
SELECT * FROM users 
WHERE age > 18 AND email LIKE '%@gmail.com';-- 去重查询
SELECT DISTINCT age FROM users;-- 排序查询
SELECT * FROM users ORDER BY created_at DESC;-- 限制查询结果数量
SELECT * FROM users LIMIT 10;
SELECT * FROM users LIMIT 10, 20; -- 跳过前10条,取20条

4.2 聚合函数

-- 统计函数
SELECT COUNT(*) FROM users;
SELECT COUNT(DISTINCT age) FROM users;
SELECT MAX(age), MIN(age), AVG(age) FROM users;
SELECT SUM(price) FROM orders;-- 分组查询
SELECT age, COUNT(*) as user_count 
FROM users 
GROUP BY age;-- 分组后过滤
SELECT age, COUNT(*) as user_count 
FROM users 
GROUP BY age 
HAVING COUNT(*) > 5;

4.3 连接查询

-- 内连接
SELECT u.username, o.product_name, o.price
FROM users u
INNER JOIN orders o ON u.id = o.user_id;-- 左连接
SELECT u.username, o.product_name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id;-- 右连接
SELECT u.username, o.product_name
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;-- 全外连接(MySQL中使用UNION模拟)
SELECT u.username, o.product_name
FROM users u
LEFT JOIN orders o ON u.id = o.user_id
UNION
SELECT u.username, o.product_name
FROM users u
RIGHT JOIN orders o ON u.id = o.user_id;

4.4 子查询

-- 简单子查询
SELECT * FROM users 
WHERE id IN (SELECT user_id FROM orders);-- EXISTS子查询
SELECT * FROM users u
WHERE EXISTS (SELECT 1 FROM orders o WHERE o.user_id = u.id);-- 标量子查询
SELECT username, (SELECT COUNT(*) FROM orders WHERE user_id = users.id) as order_count
FROM users;

5. 数据修改命令

5.1 插入数据

命令格式:

INSERT INTO table_name (column1, column2, ...)
VALUES (value1, value2, ...);

代码示例:

-- 插入单条记录
INSERT INTO users (username, email, age)
VALUES ('john_doe', 'john@example.com', 25);-- 插入多条记录
INSERT INTO users (username, email, age) VALUES
('alice', 'alice@example.com', 28),
('bob', 'bob@example.com', 32),
('charlie', 'charlie@example.com', 24);-- 插入查询结果
INSERT INTO users_backup (username, email)
SELECT username, email FROM users WHERE age > 30;-- 忽略重复插入
INSERT IGNORE INTO users (username, email, age)
VALUES ('existing_user', 'existing@example.com', 25);-- 存在则更新,不存在则插入
INSERT INTO users (username, email, age)
VALUES ('john_doe', 'john_new@example.com', 26)
ON DUPLICATE KEY UPDATE
email = VALUES(email), age = VALUES(age);

5.2 更新数据

命令格式:

UPDATE table_name
SET column1 = value1, column2 = value2, ...
WHERE condition;

代码示例:

-- 更新单个字段
UPDATE users SET age = 26 WHERE username = 'john_doe';-- 更新多个字段
UPDATE users 
SET email = 'newemail@example.com', age = age + 1
WHERE id = 1;-- 条件更新
UPDATE users SET age = age + 1 WHERE age < 30;-- 连接更新
UPDATE users u
JOIN orders o ON u.id = o.user_id
SET u.last_order_date = o.order_date
WHERE o.order_date = (SELECT MAX(order_date) FROM orders o2 WHERE o2.user_id = u.id
);

5.3 删除数据

命令格式:

DELETE FROM table_name WHERE condition;

代码示例:

-- 删除特定记录
DELETE FROM users WHERE age < 18;-- 删除所有记录(保留表结构)
DELETE FROM temp_table;-- 连接删除
DELETE u FROM users u
JOIN orders o ON u.id = o.user_id
WHERE o.order_date < '2023-01-01';-- 限制删除数量
DELETE FROM logs ORDER BY created_at ASC LIMIT 1000;

6. 索引管理命令

6.1 创建索引

-- 创建普通索引
CREATE INDEX idx_username ON users(username);-- 创建唯一索引
CREATE UNIQUE INDEX idx_email ON users(email);-- 创建复合索引
CREATE INDEX idx_age_email ON users(age, email);-- 创建全文索引
CREATE FULLTEXT INDEX idx_content ON articles(title, content);-- 在表创建时添加索引
CREATE TABLE products (id INT AUTO_INCREMENT PRIMARY KEY,name VARCHAR(100),category_id INT,price DECIMAL(10,2),INDEX idx_category (category_id),INDEX idx_price (price)
);

6.2 查看和删除索引

-- 查看表的索引
SHOW INDEX FROM table_name;-- 删除索引
DROP INDEX index_name ON table_name;-- 示例
SHOW INDEX FROM users;
DROP INDEX idx_username ON users;

7. 用户权限管理

7.1 用户管理

-- 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';-- 修改用户密码
ALTER USER 'username'@'host' IDENTIFIED BY 'new_password';-- 删除用户
DROP USER 'username'@'host';-- 查看用户
SELECT user, host FROM mysql.user;-- 示例
CREATE USER 'webuser'@'localhost' IDENTIFIED BY 'secure_password';
CREATE USER 'readonly'@'%' IDENTIFIED BY 'readonly_pass';

7.2 权限管理

-- 授予权限
GRANT privileges ON database.table TO 'username'@'host';-- 回收权限
REVOKE privileges ON database.table FROM 'username'@'host';-- 查看权限
SHOW GRANTS FOR 'username'@'host';-- 刷新权限
FLUSH PRIVILEGES;-- 示例
-- 授予所有权限
GRANT ALL PRIVILEGES ON mydb.* TO 'webuser'@'localhost';-- 授予选择和插入权限
GRANT SELECT, INSERT ON mydb.users TO 'readonly'@'%';-- 授予特定表的权限
GRANT UPDATE(email, age) ON mydb.users TO 'limited_user'@'localhost';

8. 备份与恢复

8.1 使用mysqldump备份

# 备份单个数据库
mysqldump -u username -p database_name > backup.sql# 备份单个表
mysqldump -u username -p database_name table_name > table_backup.sql# 备份多个数据库
mysqldump -u username -p --databases db1 db2 > multiple_backup.sql# 备份所有数据库
mysqldump -u username -p --all-databases > all_backup.sql# 备份时添加额外选项
mysqldump -u username -p --single-transaction --routines --triggers database_name > backup.sql

8.2 恢复数据

# 恢复数据库
mysql -u username -p database_name < backup.sql# 在MySQL中执行SQL文件
mysql> SOURCE /path/to/backup.sql;

9. 性能优化命令

9.1 查询执行计划

-- 分析查询执行计划
EXPLAIN SELECT * FROM users WHERE age > 25;-- 详细执行计划
EXPLAIN FORMAT=JSON SELECT * FROM users WHERE age > 25;-- 分析表
ANALYZE TABLE table_name;-- 优化表
OPTIMIZE TABLE table_name;

9.2 性能监控

-- 显示进程列表
SHOW PROCESSLIST;-- 显示状态变量
SHOW STATUS;
SHOW GLOBAL STATUS LIKE 'Connections';-- 显示系统变量
SHOW VARIABLES;
SHOW VARIABLES LIKE 'max_connections';-- 查看慢查询
SHOW VARIABLES LIKE 'slow_query_log';
SHOW VARIABLES LIKE 'long_query_time';

10. 系统信息查看

10.1 服务器信息

-- 查看MySQL版本
SELECT VERSION();-- 查看当前用户
SELECT USER();-- 查看当前数据库
SELECT DATABASE();-- 查看服务器状态
SHOW STATUS;-- 查看引擎信息
SHOW ENGINES;-- 查看字符集
SHOW CHARACTER SET;-- 查看排序规则
SHOW COLLATION;

10.2 连接和配置信息

-- 查看当前连接数
SHOW STATUS LIKE 'Threads_connected';-- 查看最大连接数
SHOW VARIABLES LIKE 'max_connections';-- 查看表大小
SELECT table_name,ROUND(((data_length + index_length) / 1024 / 1024), 2) AS 'Size in MB'
FROM information_schema.tables
WHERE table_schema = 'database_name';

11. MySQL操作流程图

连接MySQL服务器
连接成功?
选择数据库
数据库操作选择
查看数据库/表
创建数据库/表
数据CRUD操作
索引管理
用户权限管理
备份恢复
性能优化
SHOW DATABASES
SHOW TABLES
DESC TABLE
CREATE DATABASE
CREATE TABLE
ALTER TABLE
SELECT查询
INSERT插入
UPDATE更新
DELETE删除
基本查询
条件查询
连接查询
聚合查询
子查询
CREATE INDEX
DROP INDEX
SHOW INDEX
CREATE USER
GRANT权限
REVOKE权限
mysqldump备份
mysql恢复
EXPLAIN分析
SHOW STATUS
OPTIMIZE TABLE
继续操作或退出
继续操作?
断开连接
EXIT/QUIT

总结

这份指南涵盖了MySQL的核心操作命令,从基础的连接和数据库管理,到高级的性能优化和权限管理。每个部分都包含了:

  • 清晰的命令格式:标准化的语法结构
  • 重要参数说明:关键参数的作用和用法
  • 实用代码示例:真实场景中的应用
  • 最佳实践建议:提高效率和安全性的技巧

通过流程图可以清楚地看到MySQL操作的整体流程,从连接到各种数据库操作的逻辑关系。建议根据实际需求选择相应的命令,并在实践中逐步掌握这些技能。

记住:

  • 总是在生产环境中谨慎操作
  • 定期备份重要数据
  • 为敏感操作设置适当的权限
  • 使用EXPLAIN分析查询性能
  • 保持数据库和索引的优化
http://www.dtcms.com/a/308608.html

相关文章:

  • systmctl的作用,使用场景和用法
  • 硬件-音频学习DAY1——音箱材料选择:密度板为何完胜实木
  • 动手学习深度学习-深度学习知识大纲
  • 云迁移技术深度解析:核心原理与最佳实践
  • Python删除字符串的3种高效方法
  • Spring Boot + MinIO + KKFile:三步搭建企业级文件预览系统
  • Mysql索引失效问题及其原因
  • 【Leetcode】2683. 相邻值的按位异或
  • 五、cv::SparseMat的介绍和使用
  • 是采用示例模板,还是采用json的结构化数据,哪种方式会让llm的输出更加稳定?
  • 查询目前服务器所占的带宽的命令(上传和下载)
  • CNN卷积神经网络之LeNet和AlexNet经典网络模型(三)
  • c语言的编译链接
  • Winform PathGradientBrush类使用
  • C#程序本地运行正常,通过网络下载报错:FileLoadException:“未能加载文件或程序集“xxx.dll”或它的某一个依赖项。
  • 【pycharm的使用】
  • Qwen3-30B-A3B-Thinking-2507 推理模型深度评测
  • 250721脑电分析课题进展——手工特征总结
  • lsof命令
  • SSO面临的问题
  • 为什么有时神经元会输出类似(甚至一样)?
  • 行业分享丨从工具应用到体系进化:东风商用车仿真体系建设与实践
  • 【源力觉醒 创作者计划】文心一言与deepseek集成springboot开发哪个更方便
  • 【力扣】面试经典150题总结01-数组/字符串
  • Dev-C++ 6.3 安装与使用指南:适合新手的C/C++编程工具
  • Allegro实用技巧-Snap-命令行移动
  • Android端RTMP低延迟播放器在工业与智能场景下的架构与落地
  • MySQL 中 CHAR 和 VARCHAR 类型有什么区别?
  • 一次性接收大量上传图片,后端优化方式
  • 【Git】Git 实战:完整拉取项目所有分支和标签,切换远程仓库,解决保护分支推送冲突