命令MySQL数据库是数据库管理中的核心操作,涵盖了数据定义、数据操作、数据查询、数据控制等多个方面,MySQL作为全球最受欢迎的开源关系型数据库管理系统,其命令行工具(mysql)提供了高效、灵活的交互式操作方式,适用于开发、测试、运维等多种场景,以下将从基础命令到高级应用,详细解析MySQL数据库的常用操作及注意事项。

连接与退出MySQL数据库
在使用MySQL命令前,首先需要建立与数据库服务器的连接,通过命令行工具连接MySQL的基本语法为:
mysql -h 主机名 -u 用户名 -p密码
连接到本地MySQL服务器的root用户(无密码时可直接回车):
mysql -h localhost -u root -p
连接成功后,会显示欢迎信息及mysql>提示符,若要退出MySQL,可执行以下命令之一:
exit; quit; Ctrl+D
数据库操作
创建数据库
使用CREATE DATABASE语句创建新数据库,需指定数据库名称和字符集(推荐使用utf8mb4以支持完整Unicode字符):

CREATE DATABASE mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
查看数据库列表
SHOW DATABASES;
该命令会列出MySQL服务器中所有数据库的名称,可通过LIKE关键字过滤结果,
SHOW DATABASES LIKE 'my%';
选择数据库
执行任何数据库操作前,需先选择目标数据库:
USE mydb;
若切换成功,会提示Database changed。
删除数据库
警告:删除操作不可逆,将永久删除数据库及所有数据!
DROP DATABASE mydb;
数据表操作
创建数据表
使用CREATE TABLE语句定义表结构,需指定列名、数据类型、约束条件(如主键、外键、非空等),例如创建用户表:
CREATE TABLE users (
id INT AUTO_INCREMENT PRIMARY KEY,
username VARCHAR(50) NOT NULL UNIQUE,
email VARCHAR(100) NOT NULL,
created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
);
AUTO_INCREMENT:自动递增,通常用于主键。PRIMARY KEY:主键约束,确保唯一性。UNIQUE:唯一约束,防止重复值。DEFAULT CURRENT_TIMESTAMP:默认值为当前时间。
查看表结构
DESCRIBE users;
或
SHOW COLUMNS FROM users;
修改表结构
- 添加列:
ALTER TABLE users ADD COLUMN age INT DEFAULT 18;
- 修改列类型:
ALTER TABLE users MODIFY COLUMN username VARCHAR(100);
- 删除列:
ALTER TABLE users DROP COLUMN age;
删除数据表
DROP TABLE users;
数据操作(CRUD)
插入数据(INSERT)
INSERT INTO users (username, email) VALUES ('alice', 'alice@example.com');
批量插入:
INSERT INTO users (username, email) VALUES
('bob', 'bob@example.com'),
('charlie', 'charlie@example.com');
查询数据(SELECT)
基础查询:
SELECT * FROM users;
条件查询(WHERE子句):
SELECT * FROM users WHERE age > 25;
排序(ORDER BY):
SELECT * FROM users ORDER BY created_at DESC;
分页(LIMIT):
SELECT * FROM users LIMIT 10 OFFSET 20; -- 跳过前20条,返回10条
更新数据(UPDATE)
UPDATE users SET email = 'new_email@example.com' WHERE id = 1;
注意:务必添加WHERE条件,否则将更新全表数据!
删除数据(DELETE)
DELETE FROM users WHERE id = 1;
同样需注意WHERE条件,避免误删全表数据。
数据查询高级技巧
聚合函数
MySQL支持多种聚合函数,如COUNT()、SUM()、AVG()、MAX()、MIN(),例如统计用户总数:
SELECT COUNT(*) AS total_users FROM users;
分组查询(GROUP BY)
按性别统计用户数量(假设表中有gender列):
SELECT gender, COUNT(*) AS count FROM users GROUP BY gender;
多表连接查询
假设存在订单表(orders),查询用户及其订单:
SELECT u.username, o.order_id FROM users u JOIN orders o ON u.id = o.user_id;
子查询
查询年龄大于平均年龄的用户:
SELECT * FROM users WHERE age > (SELECT AVG(age) FROM users);
用户与权限管理
创建用户
CREATE USER 'newuser'@'localhost' IDENTIFIED BY 'password';
授权
GRANT SELECT, INSERT ON mydb.* TO 'newuser'@'localhost';
刷新权限
FLUSH PRIVILEGES;
撤销权限
REVOKE INSERT ON mydb.* FROM 'newuser'@'localhost';
数据备份与恢复
备份数据库
使用mysqldump工具:
mysqldump -u root -p mydb > mydb_backup.sql
恢复数据库
mysql -u root -p mydb < mydb_backup.sql
性能优化建议
- 索引优化:为常用查询条件的列创建索引,
CREATE INDEX idx_email ON users(email);
- **避免SELECT ***:只查询必要的列,减少数据传输量。
- 分页优化:对于深度分页(如
LIMIT 100000, 10),使用子查询或游标优化。
常见错误与解决
- Access denied:检查用户名、密码及主机权限配置。
- Unknown column:确认表结构是否正确,列名拼写是否无误。
相关问答FAQs
Q1: 如何查看MySQL当前版本?
A1: 在MySQL命令行中执行以下语句之一:
SELECT VERSION();
或通过命令行工具查看:
mysql --version
Q2: 如何重置MySQL root密码?
A2: 1. 停止MySQL服务(sudo systemctl stop mysql);
2. 跳过权限表启动:sudo mysqld_safe --skip-grant-tables &;
3. 无密码登录并更新密码:
UPDATE mysql.user SET authentication_string=PASSWORD('newpassword') WHERE User='root';
FLUSH PRIVILEGES;
重启MySQL服务并验证新密码。
