1. 连接和退出
连接到 MySQL
命令:
mysql -u [username] -p
-u [username]
:指定连接 MySQL 使用的用户名。-p
:提示输入密码。
示例:
mysql -u root -p
系统会提示您输入密码,输入密码后即可连接到 MySQL。
实际案例:
- 开发环境:开发人员使用
mysql -u dev_user -p
命令连接到 MySQL 数据库,以便测试和开发应用程序。 - 生产环境:DBA 使用
mysql -u admin -p
命令连接到生产数据库,进行维护和管理。
退出 MySQL
命令:
EXIT;
或
QUIT;
- 这两个命令都用于安全退出 MySQL 会话。
实际案例:
- 开发环境:开发人员在完成数据库查询后使用
EXIT;
退出 MySQL 会话。 - 生产环境:DBA 在执行完管理任务后使用
QUIT;
退出 MySQL 会话。
2. 数据库操作
显示所有数据库
命令:
SHOW DATABASES;
- 列出 MySQL 服务器上的所有数据库。
实际案例:
- 开发环境:开发人员使用
SHOW DATABASES;
查看现有数据库,确认存储位置和名称。 - 生产环境:DBA 使用
SHOW DATABASES;
检查和管理服务器上的所有数据库。
创建数据库
命令:
CREATE DATABASE [database_name];
- 创建一个新数据库。
示例:
CREATE DATABASE project_db;
实际案例:
- 项目启动:DBA 创建一个新数据库
project_db
来存储项目相关的数据。
删除数据库
命令:
DROP DATABASE [database_name];
- 删除一个已有数据库。
示例:
DROP DATABASE project_db;
实际案例:
- 项目结束或重构:DBA 删除不再需要的数据库
project_db
,释放资源。
使用数据库
命令:
USE [database_name];
- 切换到指定数据库。
示例:
USE project_db;
实际案例:
- 执行 SQL 语句前:开发人员切换到目标数据库
project_db
,以确保在正确的数据库中执行操作。
查看当前使用的数据库
命令:
SELECT DATABASE();
- 返回当前使用的数据库名称。
实际案例:
- 确认当前数据库:开发人员或 DBA 使用
SELECT DATABASE();
确认当前操作的数据库,避免在错误的数据库中执行操作。
3. 表操作
显示所有表
命令:
SHOW TABLES;
- 列出当前数据库中的所有表。
实际案例:
- 查看表:开发人员或 DBA 使用
SHOW TABLES;
查看当前数据库中的所有表,了解数据库结构。
创建表
命令:
CREATE TABLE [table_name] (
column1 datatype constraints,
column2 datatype constraints,
...
) ENGINE=InnoDB;
- 创建一个新表,定义列名、数据类型和约束。
示例:
CREATE TABLE employees (
employee_id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(100),
position VARCHAR(50),
salary DECIMAL(10, 2),
hire_date DATE
) ENGINE=InnoDB;
实际案例:
- HR 系统:创建
employees
表来存储员工信息。
删除表
命令:
DROP TABLE [table_name];
- 删除一个已有表。
示例:
DROP TABLE employees;
实际案例:
- 重构数据库:删除不再需要的表
employees
,清理数据库结构。
查看表结构
命令:
DESCRIBE [table_name];
- 显示表的列、数据类型、约束和其他信息。
示例:
DESCRIBE employees;
实际案例:
- 了解表结构:开发人员或 DBA 使用
DESCRIBE employees;
查看employees
表的结构,以便了解表列及其数据类型。
修改表结构
添加新列
命令:
ALTER TABLE [table_name] ADD [column_name] [datatype] [constraints];
示例:
ALTER TABLE employees ADD age INT;
实际案例:
- 需求变更:在
employees
表中添加年龄字段。
添加新列并指定位置
命令:
ALTER TABLE [table_name] ADD [column_name] [datatype] [constraints] [FIRST | AFTER existing_column];
FIRST
:将新列添加到表的第一个位置。AFTER existing_column
:将新列添加到指定列之后。
示例:
ALTER TABLE employees ADD age INT AFTER name;
实际案例:
- 需求变更:在
employees
表中name
列之后添加age
字段。
修改列数据类型并指定位置
命令:
ALTER TABLE [table_name] MODIFY [column_name] [new_datatype] [constraints] [FIRST | AFTER existing_column];
示例:
ALTER TABLE employees MODIFY age SMALLINT AFTER position;
实际案例:
- 优化数据类型:修改
employees
表中age
字段的数据类型,并将其移动到position
列之后。
重命名列并指定位置
命令:
ALTER TABLE [table_name] CHANGE [old_column_name] [new_column_name] [new_datatype] [constraints] [FIRST | AFTER existing_column];
示例:
ALTER TABLE employees CHANGE age employee_age INT AFTER position;
实际案例:
- 提高可读性:将
age
字段重命名为employee_age
,并将其移动到position
列之后。
修改列数据类型
命令:
ALTER TABLE [table_name] MODIFY [column_name] [new_datatype];
示例:
ALTER TABLE employees MODIFY age SMALLINT;
实际案例:
- 优化数据类型:由于年龄数据量小,修改
employees
表中age
字段的数据类型。
重命名列
命令:
ALTER TABLE [table_name] CHANGE [old_column_name] [new_column_name] [new_datatype];
示例:
ALTER TABLE employees CHANGE age employee_age INT;
实际案例:
- 提高可读性:将
age
字段重命名为employee_age
,使字段名称更具描述性。
删除列
命令:
ALTER TABLE [table_name] DROP COLUMN [column_name];
示例:
ALTER TABLE employees DROP COLUMN employee_age;
实际案例:
- 需求变更:删除不再需要的
employee_age
字段。
复制表结构和数据
复制表结构
命令:
CREATE TABLE [new_table_name] LIKE [existing_table_name];
示例:
CREATE TABLE employees_backup LIKE employees;
实际案例:
- 数据备份:在进行大规模数据修改前,备份
employees
表的结构。
复制表数据
命令:
INSERT INTO [new_table_name] SELECT * FROM [existing_table_name];
示例:
INSERT INTO employees_backup SELECT * FROM employees;
实际案例:
- 数据备份:在进行大规模数据修改前,备份
employees
表的数据。
4. 数据操作
插入数据
命令:
INSERT INTO [table_name] ([column1], [column2], ...) VALUES ([value1], [value2], ...);
示例:
INSERT INTO employees (name, position, salary, hire_date) VALUES ('John Doe', 'Manager', 75000, '2022-01-15');
实际案例:
- HR 系统:在
employees
表中添加新员工John Doe
的信息。
批量插入数据
命令:
INSERT INTO [table_name] ([column1], [column2], ...) VALUES
([value1], [value2], ...),
([value3], [value4], ...),
...;
示例:
INSERT INTO employees (name, position, salary, hire_date) VALUES
('Alice Smith', 'Developer', 60000, '2021-05-22'),
('Bob Johnson', 'Designer', 55000, '2020-11-02'),
('Charlie Brown', 'Analyst', 50000, '2019-08-18');
实际案例:
- HR 系统:批量添加多名员工的信息。
更新数据
更单条记录
命令:
UPDATE [table_name] SET [column1] = [value1], [column2] = [value2], ... WHERE [condition];
示例:
UPDATE employees SET salary = 80000 WHERE name = 'John Doe';
实际案例:
- 员工加薪:更新
John Doe
的薪资信息。
更新多条记录
命令:
UPDATE [table_name] SET [column1] = [value1], [column2] = [value2], ... WHERE [condition];
示例:
UPDATE employees SET position = 'Senior Developer' WHERE position = 'Developer';
实际案例:
- 职位升级:更新所有
Developer
的职位为Senior Developer
。
删除数据
删除单条记录
命令:
DELETE FROM [table_name] WHERE [condition];
示例:
DELETE FROM employees WHERE name = 'Charlie Brown';
实际案例:
- 员工离职:删除
Charlie Brown
的信息。
删除多条记录
命令:
DELETE FROM [table_name] WHERE [condition];
示例:
DELETE FROM employees WHERE hire_date < '2020-01-01';
实际案例:
- 清理历史数据:删除 2020 年之前入职的员工记录。
查询数据
查询所有数据
命令:
SELECT * FROM [table_name];
示例:
SELECT * FROM employees;
实际案例:
- 查看所有员工信息:HR 系统中查看
employees
表的所有记录。
查询特定列
命令:
SELECT [column1], [column2], ... FROM [table_name];
示例:
SELECT name, position FROM employees;
实际案例:
- 查询特定信息:查询所有员工的姓名和职位。
使用条件查询
命令:
SELECT * FROM [table_name] WHERE [condition];
示例:
SELECT * FROM employees WHERE position = 'Manager';
实际案例:
- 筛选特定记录:查询所有经理的信息。
使用模糊查询
命令:
SELECT * FROM [table_name] WHERE [column] LIKE '[pattern]';
示例:
SELECT * FROM employees WHERE name LIKE 'A%';
实际案例:
- 模糊搜索:查询名字以 ‘A’ 开头的员工。
使用排序
命令:
SELECT * FROM [table_name] ORDER BY [column1] [ASC|DESC], [column2] [ASC|DESC], ...;
示例:
SELECT * FROM employees ORDER BY hire_date DESC;
实际案例:
- 排序查询结果:按入职日期倒序查询所有员工信息。
使用分页
命令:
SELECT * FROM [table_name] LIMIT [offset], [row_count];
示例:
SELECT * FROM employees LIMIT 5 OFFSET 10;
实际案例:
- 分页显示:分页显示员工信息,每页 5 条记录,从第 11 条开始。
5. 用户和权限管理
创建用户
命令:
CREATE USER '[username]'@'[host]' IDENTIFIED BY '[password]';
示例:
CREATE USER 'new_user'@'localhost' IDENTIFIED BY 'password123';
实际案例:
- 新开发人员入职:为新开发人员创建数据库访问账号。
删除用户
命令:
DROP USER '[username]'@'[host]';
示例:
DROP USER 'new_user'@'localhost';
实际案例:
- 开发人员离职:删除离职员工的数据库访问账号。
授予权限
授予全部权限
命令:
GRANT ALL PRIVILEGES ON [database_name].* TO '[username]'@'[host]';
示例:
GRANT ALL PRIVILEGES ON project_db.* TO 'new_user'@'localhost';
实际案例:
- 赋予权限:为新开发人员授予
project_db
数据库的所有权限。
授予特定权限
命令:
GRANT [privilege1], [privilege2], ... ON [database_name].* TO '[username]'@'[host]';
示例:
GRANT SELECT, INSERT, UPDATE ON project_db.* TO 'new_user'@'localhost';
实际案例:
- 限定权限:为开发人员授予
project_db
数据库的查询、插入和更新权限。
撤销权限
命令:
REVOKE [privilege1], [privilege2], ... ON [database_name].* FROM '[username]'@'[host]';
示例:
REVOKE ALL PRIVILEGES ON project_db.* FROM 'new_user'@'localhost';
实际案例:
- 收回权限:限制开发人员的数据库访问权限。
刷新权限
命令:
FLUSH PRIVILEGES;
6. 备份和恢复
备份数据库
命令:
mysqldump -u [username] -p [database_name] > [backup_file.sql]
示例:
mysqldump -u root -p project_db > backup.sql
实际案例:
- 定期备份:定期备份
project_db
数据库以防数据丢失。
恢复数据库
命令:
mysql -u [username] -p [database_name] < [backup_file.sql]
示例:
mysql -u root -p project_db < backup.sql
实际案例:
- 数据恢复:从备份文件恢复
project_db
数据库。
7. 系统命令
查看 MySQL 服务器状态
命令:
mysqladmin -u [username] -p status
示例:
mysqladmin -u remote_user666 -p -h 192.168.1.121 -P 3366 status
实际案例:
- 检查状态:DBA 检查 MySQL 服务器的运行状态。
8. 常用快捷命令
查看当前数据库
命令:
SELECT DATABASE();
实际案例:
- 确认当前数据库:开发人员或 DBA 使用
SELECT DATABASE();
确认当前操作的数据库。
查看当前用户
命令:
SELECT USER();
实际案例:
- 确认用户身份:开发人员或 DBA 使用
SELECT USER();
确认当前连接 MySQL 的用户身份。
查看 MySQL 版本
命令:
SELECT VERSION();
实际案例:
- 检查版本信息:开发人员或 DBA 使用
SELECT VERSION();
检查 MySQL 服务器的版本信息,以确保兼容性。
查看当前日期和时间
命令:
SELECT NOW();
实际案例:
- 记录日志:开发人员或 DBA 使用
SELECT NOW();
获取当前日期和时间,用于记录日志或进行时间戳比对。
9. 高级查询
聚合函数
计数
命令:
SELECT COUNT(*) FROM [table_name];
示例:
SELECT COUNT(*) FROM employees;
实际案例:
- 统计员工总数:HR 系统中统计公司员工总数。
求和
命令:
SELECT SUM([column]) FROM [table_name];
示例:
SELECT SUM(salary) FROM employees;
实际案例:
- 计算总工资支出:计算公司总工资支出。
平均值
命令:
SELECT AVG([column]) FROM [table_name];
示例:
SELECT AVG(salary) FROM employees;
实际案例:
- 计算平均工资:计算员工的平均工资。
最大值和最小值
命令:
SELECT MAX([column]), MIN([column]) FROM [table_name];
示例:
SELECT MAX(salary), MIN(salary) FROM employees;
实际案例:
- 找出最高和最低工资:找出公司最高和最低工资。
分组查询
命令:
SELECT [column], COUNT(*) FROM [table_name] GROUP BY [column];
示例:
SELECT position, COUNT(*) FROM employees GROUP BY position;
实际案例:
- 统计职位员工数量:统计每个职位的员工数量。
多表连接
内连接
命令:
SELECT [columns] FROM [table1]
JOIN [table2] ON [table1.column] = [table2.column];
示例:
SELECT employees.name, departments.department_name
FROM employees
JOIN departments ON employees.department_id = departments.department_id;
实际案例:
- 查询员工所属部门:查询员工所属的部门信息。
左连接
命令:
SELECT [columns] FROM [table1]
LEFT JOIN [table2] ON [table1.column] = [table2.column];
示例:
SELECT employees.name, orders.order_id
FROM employees
LEFT JOIN orders ON employees.employee_id = orders.employee_id;
实际案例:
- 查询员工及其订单信息:查询所有员工及其订单信息(包括没有订单的员工)。
右连接
命令:
SELECT [columns] FROM [table1]
RIGHT JOIN [table2] ON [table1.column] = [table2.column];
示例:
SELECT employees.name, orders.order_id
FROM employees
RIGHT JOIN orders ON employees.employee_id = orders.employee_id;
实际案例:
- 查询订单及其相关员工信息:查询所有订单及其相关员工信息(包括没有关联员工的订单)。