终端中MySQL基础必掌握的命令

在数据库管理与开发中,熟练掌握MySQL命令行工具是提升效率的关键。本指南将系统梳理终端环境下MySQL的核心操作命令,涵盖数据库管理、表操作、数据增删改查、用户权限控制等模块,并结合实际示例与常见问题解决方案,帮助构建完整的MySQL终端操作知识体系。


一、连接与退出MySQL服务器

1.1 连接本地数据库

通过命令行连接到本地MySQL服务器的基础语法为:

mysql -u [用户名] -p

示例:

mysql -u root -p

输入后系统会提示输入密码
注意:密码输入时不会显示字符,直接输入后回车即可

1.2 连接远程数据库

若需连接远程服务器,需指定主机地址:

mysql -h [IP地址] -u [用户名] -p

示例:

mysql -h 192.168.1.100 -u admin -p

1.3 退出MySQL终端

执行以下任一命令退出:

EXIT;
-- 或
QUIT;

二、数据库管理

2.1 创建数据库

CREATE DATABASE [数据库名];

示例:

CREATE DATABASE school_db CHARACTER SET utf8mb4;

指定字符集可避免中文乱码问题(推荐使用utf8mb4)

2.2 查看数据库列表

SHOW DATABASES;

输出示例:

+--------------------+
| Database           |
+--------------------+
| information_schema |
| school_db          |
| mysql              |
+--------------------+

2.3 切换当前数据库

USE [数据库名];

示例:

USE school_db;

2.4 删除数据库

DROP DATABASE [数据库名];

警告:此操作不可逆,需谨慎使用


三、数据表操作

3.1 创建表

基础语法:

CREATE TABLE [表名] (
    列名1 数据类型 [约束条件],
    列名2 数据类型 [约束条件],
    ...
);

示例(学生表):

CREATE TABLE students (
    id INT AUTO_INCREMENT PRIMARY KEY,
    name VARCHAR(50) NOT NULL,
    age TINYINT UNSIGNED,
    gender ENUM('M','F') DEFAULT 'M',
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

说明

  • AUTO_INCREMENT 实现自增主键
  • NOT NULL 强制非空约束
  • ENGINE 指定存储引擎(推荐InnoDB)

3.2 查看表结构

DESC [表名];
-- 或
SHOW CREATE TABLE [表名];

输出示例:

+------------+------------------+------+-----+-------------------+----------------+
| Field      | Type             | Null | Key | Default           | Extra          |
+------------+------------------+------+-----+-------------------+----------------+
| id         | int(11)          | NO   | PRI | NULL              | auto_increment |
| name       | varchar(50)      | NO   |     | NULL              |                |
| age        | tinyint(3)       | YES  |     | NULL              |                |
+------------+------------------+------+-----+-------------------+----------------+

3.3 修改表结构

新增字段
ALTER TABLE [表名] ADD COLUMN [列名] [数据类型] [约束];

示例:

ALTER TABLE students ADD COLUMN email VARCHAR(100) UNIQUE AFTER name;
修改字段
ALTER TABLE [表名] MODIFY COLUMN [列名] [新数据类型];

示例:

ALTER TABLE students MODIFY COLUMN age SMALLINT UNSIGNED;
删除字段
ALTER TABLE [表名] DROP COLUMN [列名];

四、数据操作(CRUD)

4.1 插入数据

INSERT INTO [表名] (列1,列2,...) VALUES (值1,值2,...);

批量插入示例:

INSERT INTO students (name, age, email)
VALUES 
    ('张三', 18, '[email protected]'),
    ('李四', 19, '[email protected]');

4.2 查询数据

基础查询:

SELECT * FROM [表名] WHERE [条件];

进阶示例:

SELECT name, age 
FROM students 
WHERE age BETWEEN 18 AND 20 
ORDER BY created_at DESC 
LIMIT 10;

4.3 更新数据

UPDATE [表名] SET 列1=值1,列2=值2 WHERE [条件];

示例:

UPDATE students SET age=20 WHERE name='张三';

4.4 删除数据

DELETE FROM [表名] WHERE [条件];

重要:务必添加WHERE条件,否则将清空整表


五、用户与权限管理

5.1 创建用户

CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';

示例:

CREATE USER 'dev_user'@'%' IDENTIFIED BY 'SecurePass123!';

5.2 权限授予

GRANT [权限类型] ON [数据库.表] TO '用户'@'主机';

示例:

GRANT SELECT, INSERT ON school_db.* TO 'dev_user'@'%';

5.3 查看权限

SHOW GRANTS FOR '用户'@'主机';

5.4 撤销权限

REVOKE [权限类型] ON [数据库.表] FROM '用户'@'主机';

六、备份与恢复

6.1 数据库备份

使用mysqldump工具:

mysqldump -u root -p school_db > school_db_backup.sql

6.2 恢复数据库

mysql -u root -p school_db < school_db_backup.sql

七、常见问题处理

7.1 连接失败

  • 错误现象ERROR 2003 (HY000): Can't connect to MySQL server
  • 解决方案
    1. 检查服务状态:systemctl status mysql(Linux)或 net start mysql(Windows)
    2. 确认防火墙是否开放3306端口
    3. 验证用户名/密码是否正确

7.2 权限不足

  • 错误现象ERROR 1142 (42000): SELECT command denied
  • 解决方案
    1. 使用管理员账户重新授权:
    GRANT SELECT ON school_db.* TO 'dev_user'@'%';
    FLUSH PRIVILEGES;

7.3 SQL语法错误

  • 错误现象ERROR 1064 (42000): You have an error in your SQL syntax
  • 排查方法
    1. 检查引号、分号等符号是否闭合
    2. 使用SHOW WARNINGS;查看详细错误信息
    3. 参考官方文档验证语法

八、高效操作技巧

  1. 历史命令复用
    使用上下箭头键快速调用历史命令,或通过mysql --auto-rehash启用自动补全。

  2. 批处理模式
    执行SQL脚本文件:

    mysql -u root -p school_db < batch_operations.sql
  3. 输出格式化
    使用\G替代分号竖排显示结果:

    SELECT * FROM students LIMIT 1\G

九、进阶学习(以下)

十、事务与数据一致性管理

10.1 事务基本操作

MySQL通过事务机制实现ACID特性,基础命令包括:

START TRANSACTION;  -- 开启事务
COMMIT;             -- 提交事务
ROLLBACK;           -- 提交回滚

示例场景:

START TRANSACTION;
UPDATE accounts SET balance = balance - 500 WHERE user_id = 1001;
UPDATE accounts SET balance = balance + 500 WHERE user_id = 1002;
COMMIT;

注意:InnoDB引擎支持事务,MyISAM引擎不支持

10.2 事务隔离级别

查看与修改隔离级别:

SELECT @@transaction_isolation;  -- 查看当前隔离级别
SET SESSION TRANSACTION ISOLATION LEVEL READ COMMITTED;  -- 设置会话级隔离级别

四种隔离级别:

  • READ UNCOMMITTED
  • READ COMMITTED
  • REPEATABLE READ(默认)
  • SERIALIZABLE

十一、索引优化与管理

11.1 创建与删除索引

CREATE INDEX idx_name ON users(name);  -- 单列索引
CREATE INDEX idx_name_age ON users(name, age);  -- 复合索引
DROP INDEX idx_name ON users;

最佳实践

  • 为WHERE、JOIN、ORDER BY涉及的列建索引
  • 避免在频繁更新的列建索引
  • 使用EXPLAIN分析查询是否命中索引

11.2 查看索引使用情况

SHOW INDEX FROM users;

输出示例:

+-------+------------+-------------+--------------+-------------+-----------+-------------+
| Table | Non_unique | Key_name    | Seq_in_index | Column_name | Collation | Cardinality |
+-------+------------+-------------+--------------+-------------+-----------+-------------+
| users |          0 | PRIMARY     |            1 | id          | A         |        1000 |
| users |          1 | idx_name    |            1 | name        | A         |         500 |
+-------+------------+-------------+--------------+-------------+-----------+-------------+

十二、数据导入导出

12.1 CSV文件导入

LOAD DATA INFILE '/path/to/users.csv'
INTO TABLE users
FIELDS TERMINATED BY ',' 
ENCLOSED BY '"'
LINES TERMINATED BY '\n'
IGNORE 1 ROWS;

注意:需确保文件权限和secure_file_priv配置正确

12.2 导出查询结果

mysql -u root -p -e "SELECT * FROM users" school_db > export.csv

十三、系统变量与状态监控

13.1 查看服务器变量

SHOW VARIABLES LIKE 'innodb_buffer_pool_size';  -- 查看缓冲池大小
SET GLOBAL innodb_buffer_pool_size = 2147483648;  -- 动态调整参数

13.2 监控运行状态

SHOW STATUS LIKE 'Threads_connected';  -- 查看当前连接数
SHOW PROCESSLIST;  -- 显示活跃连接详情

十四、存储过程与函数

14.1 创建存储过程

DELIMITER //
CREATE PROCEDURE GetStudent(IN student_id INT)
BEGIN
    SELECT * FROM students WHERE id = student_id;
END //
DELIMITER ;

调用方式:

CALL GetStudent(1001);

14.2 自定义函数

CREATE FUNCTION AgeGroup(age INT) 
RETURNS VARCHAR(10)
BEGIN
    RETURN CASE 
        WHEN age < 18 THEN '未成年'
        ELSE '成年'
    END;
END

使用示例:

SELECT name, AgeGroup(age) FROM students;

十五、高级查询技巧

15.1 联合查询

(SELECT name FROM teachers)
UNION
(SELECT name FROM students)
ORDER BY name;

15.2 分组统计

SELECT 
    department,
    COUNT(*) AS total,
    AVG(salary) AS avg_salary 
FROM employees
GROUP BY department
HAVING avg_salary > 10000;

十六、性能优化实践

16.1 查询执行计划分析

使用EXPLAIN诊断SQL:

EXPLAIN SELECT * FROM users WHERE age > 25;

输出字段解析:

  • type:访问类型(ALL全表扫描、index索引扫描、range范围扫描)
  • key:实际使用的索引
  • rows:预估扫描行数

16.2 慢查询日志配置

修改my.cnf

slow_query_log = 1
slow_query_log_file = /var/log/mysql/slow.log
long_query_time = 2

分析工具:

mysqldumpslow -s t /var/log/mysql/slow.log

十七、安全加固建议

  1. 禁用远程root登录
    DELETE FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost', '127.0.0.1');
  2. 定期修改密码
    ALTER USER 'dev_user'@'%' IDENTIFIED BY 'NewSecurePass456!';
  3. 启用SSL连接
    GRANT USAGE ON *.* TO 'user'@'%' REQUIRE SSL;

十八、扩展学习资源

  1. 官方文档
    MySQL 8.0 Reference Manual
  2. 推荐书籍
    《高性能MySQL(第4版)》《MySQL技术内幕:InnoDB存储引擎》
  3. 在线实验平台
    LeetCode数据库题库,leetcode

你可能感兴趣的:(终端中MySQL基础必掌握的命令)