目录
[1. 连接到 MySQL](#1. 连接到 MySQL)
[2. 退出 MySQL](#2. 退出 MySQL)
[1. 显示数据库列表](#1. 显示数据库列表)
[2. 创建数据库](#2. 创建数据库)
[3. 使用数据库](#3. 使用数据库)
[4. 删除数据库](#4. 删除数据库)
[1. 显示当前数据库中的表](#1. 显示当前数据库中的表)
[2. 创建表](#2. 创建表)
[3. 查看表结构](#3. 查看表结构)
[4. 删除表](#4. 删除表)
[5. 修改表](#5. 修改表)
[1. 插入数据](#1. 插入数据)
[2. 查询数据](#2. 查询数据)
[3. 更新数据](#3. 更新数据)
[4. 删除数据](#4. 删除数据)
[1. 创建用户](#1. 创建用户)
[2. 授予权限](#2. 授予权限)
[3. 查看用户权限](#3. 查看用户权限)
[4. 撤销权限](#4. 撤销权限)
[5. 删除用户](#5. 删除用户)
[1. 备份数据库](#1. 备份数据库)
[2. 恢复数据库](#2. 恢复数据库)
[1. 查看正在运行的查询](#1. 查看正在运行的查询)
[2. 杀死一个查询](#2. 杀死一个查询)
[3. 查看表状态](#3. 查看表状态)
[4. 查看服务器状态](#4. 查看服务器状态)
[1. 使用 LIMIT 和 OFFSET](#1. 使用 LIMIT 和 OFFSET)
[2. 示例](#2. 示例)
[1. 基本嵌套查询](#1. 基本嵌套查询)
[2. 示例](#2. 示例)
[3. 使用 IN 和子查询](#3. 使用 IN 和子查询)
[4. 示例](#4. 示例)
[1. 内连接 (INNER JOIN)](#1. 内连接 (INNER JOIN))
[2. 左连接 (LEFT JOIN)](#2. 左连接 (LEFT JOIN))
[3. 右连接 (RIGHT JOIN)](#3. 右连接 (RIGHT JOIN))
[4. 示例](#4. 示例)
[1. 计算字段(计算列)](#1. 计算字段(计算列))
[2. 使用 CASE 实现条件逻辑](#2. 使用 CASE 实现条件逻辑)
[3. 分组和聚合](#3. 分组和聚合)
1、初级
MySQL 提供了丰富的命令集用于数据库管理和操作。以下是一些常用的 MySQL 命令,按功能分类:
一、连接和退出
1. 连接到 MySQL
mysql -u username -p
提示输入密码后,输入你指定的用户名和密码。
2. 退出 MySQL
exit;
二、数据库操作
1. 显示数据库列表
SHOW DATABASES;
2. 创建数据库
CREATE DATABASE database_name;
3. 使用数据库
USE database_name;
4. 删除数据库
DROP DATABASE database_name;
三、表操作
1. 显示当前数据库中的表
SHOW TABLES;
2. 创建表
CREATE TABLE table_name (
column1_name column1_datatype,
column2_name column2_datatype,
...
);
3. 查看表结构
DESCRIBE table_name;
4. 删除表
DROP TABLE table_name;
5. 修改表
-
添加列:
ALTER TABLE table_name ADD column_name column_datatype;
-
删除列:
ALTER TABLE table_name DROP COLUMN column_name;
-
修改列:
ALTER TABLE table_name MODIFY COLUMN column_name column_datatype;
四、数据操作
1. 插入数据
INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);
2. 查询数据
SELECT column1, column2, ... FROM table_name;
-
查询所有列:
SELECT * FROM table_name;
-
带条件查询:
SELECT * FROM table_name WHERE condition;
3. 更新数据
UPDATE table_name SET column1 = value1, column2 = value2, ... WHERE condition;
4. 删除数据
DELETE FROM table_name WHERE condition;
五、用户管理
1. 创建用户
CREATE USER 'username'@'host' IDENTIFIED BY 'password';
2. 授予权限
GRANT ALL PRIVILEGES ON database_name.* TO 'username'@'host';
-
刷新权限:
FLUSH PRIVILEGES;
3. 查看用户权限
SHOW GRANTS FOR 'username'@'host';
4. 撤销权限
REVOKE ALL PRIVILEGES ON database_name.* FROM 'username'@'host';
5. 删除用户
DROP USER 'username'@'host';
六、备份和恢复
1. 备份数据库
在命令行中使用 mysqldump
工具:
mysqldump -u username -p database_name > backup_file.sql
2. 恢复数据库
在命令行中使用 mysql
工具:
mysql -u username -p database_name < backup_file.sql
七、常用高级命令
1. 查看正在运行的查询
SHOW PROCESSLIST;
2. 杀死一个查询
KILL query_id;
3. 查看表状态
SHOW TABLE STATUS LIKE 'table_name';
4. 查看服务器状态
SHOW STATUS;
MySQL 的分页查询和嵌套查询是常用的高级查询操作。以下是这些查询的详细说明和示例。
2、高级
一、分页查询
分页查询用于从大量数据中分段获取数据,从而提高查询效率和用户体验。
1. 使用 LIMIT
和 OFFSET
LIMIT
用于指定返回记录的最大数量,OFFSET
用于指定起始位置。
SELECT column1, column2, ...
FROM table_name
LIMIT limit OFFSET offset;
2. 示例
假设你有一个名为 employees
的表,包含员工信息,每页显示 10 条记录:
-
第一页:
SELECT * FROM employees LIMIT 10 OFFSET 0;
-
第二页:
SELECT * FROM employees LIMIT 10 OFFSET 10;
-
第三页:
SELECT * FROM employees LIMIT 10 OFFSET 20;
二、嵌套查询(子查询)
嵌套查询是指在一个 SQL 查询中嵌套另一个查询,通常用于条件过滤、数据筛选等场景。
1. 基本嵌套查询
在 WHERE
子句中使用子查询:
SELECT column1, column2, ...
FROM table_name
WHERE column_name = (SELECT column_name FROM another_table WHERE condition);
2. 示例
假设你有两个表 employees
和 departments
,分别存储员工和部门信息,你希望查找属于特定部门的所有员工。
-
查找部门名称为 "Sales" 的部门 ID:
SELECT department_id FROM departments WHERE department_name = 'Sales';
-
使用子查询查找属于 "Sales" 部门的所有员工:
SELECT employee_name FROM employees WHERE department_id = (SELECT department_id FROM departments WHERE department_name = 'Sales');
3. 使用 IN
和子查询
当子查询返回多个结果时,可以使用 IN
关键字:
SELECT column1, column2, ...
FROM table_name
WHERE column_name IN (SELECT column_name FROM another_table WHERE condition);
4. 示例
查找属于多个部门的员工:
SELECT employee_name
FROM employees
WHERE department_id IN (SELECT department_id FROM departments WHERE department_name IN ('Sales', 'Marketing'));
三、联合查询(JOIN)
联合查询用于从多个表中查询相关数据。
1. 内连接 (INNER JOIN
)
返回两个表中满足连接条件的记录。
SELECT a.column1, b.column2, ...
FROM table1 a
INNER JOIN table2 b ON a.common_column = b.common_column;
2. 左连接 (LEFT JOIN
)
返回左表的所有记录及其匹配的右表记录。
SELECT a.column1, b.column2, ...
FROM table1 a
LEFT JOIN table2 b ON a.common_column = b.common_column;
3. 右连接 (RIGHT JOIN
)
返回右表的所有记录及其匹配的左表记录。
SELECT a.column1, b.column2, ...
FROM table1 a
RIGHT JOIN table2 b ON a.common_column = b.common_column;
4. 示例
假设有两个表 employees
和 departments
,分别存储员工和部门信息:
-
内连接查询员工及其所在部门:
SELECT e.employee_name, d.department_name FROM employees e INNER JOIN departments d ON e.department_id = d.department_id;
-
左连接查询所有员工及其所在部门(包括没有分配部门的员工):
SELECT e.employee_name, d.department_name FROM employees e LEFT JOIN departments d ON e.department_id = d.department_id;
-
右连接查询所有部门及其员工(包括没有员工的部门):
SELECT e.employee_name, d.department_name FROM employees e RIGHT JOIN departments d ON e.department_id = d.department_id;
四、其他高级查询
1. 计算字段(计算列)
在查询中对字段进行计算:
SELECT column1, (column2 * column3) AS computed_column
FROM table_name;
2. 使用 CASE
实现条件逻辑
SELECT employee_name,
CASE
WHEN salary >= 50000 THEN 'High'
WHEN salary >= 30000 THEN 'Medium'
ELSE 'Low'
END AS salary_level
FROM employees;
3. 分组和聚合
使用 GROUP BY
和聚合函数(如 COUNT
, SUM
, AVG
):
SELECT department_id, COUNT(*)
FROM employees
GROUP BY department_id;