一、连接与退出 MySQL

1. 连接 MySQL 服务器
# 基本语法:mysql -u 用户名 -p[密码] -h 主机地址 -P 端口号
mysql -u root -p               # 本地连接,默认端口3306,回车后输入密码
mysql -u root -p123456 -h 192.168.1.100 -P 3307  # 远程连接(指定主机和端口)
  • 注意:-p 与密码之间无空格(若空格分隔,回车后需再次输入密码)。
2. 退出 MySQL
exit;    # 或 quit;

二、数据库(Database)操作

1. 查看所有数据库
SHOW DATABASES;  # 列出当前用户有权限访问的所有数据库
2. 创建数据库
# 基本语法:CREATE DATABASE [IF NOT EXISTS] 数据库名 [字符集设置];
CREATE DATABASE mydb;  # 创建名为 mydb 的数据库
CREATE DATABASE IF NOT EXISTS mydb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;  # 带字符集(支持emoji)
  • IF NOT EXISTS:避免数据库已存在时报错。
  • utf8mb4:推荐字符集,支持所有 Unicode 字符(包括 emoji)。
3. 切换 / 使用数据库
USE mydb;  # 切换到 mydb 数据库(后续操作默认在此库中执行)
4. 删除数据库
DROP DATABASE [IF EXISTS] mydb;  # 删除 mydb 数据库(谨慎操作,数据不可恢复)
5. 查看当前数据库信息
SELECT DATABASE();  # 显示当前正在使用的数据库

三、数据表(Table)操作

1. 查看当前数据库的所有表
USE mydb;
SHOW TABLES;  # 列出当前库中的所有表
2. 创建表
# 基本语法:
CREATE TABLE [IF NOT EXISTS] 表名 (
  字段1 数据类型 [约束],
  字段2 数据类型 [约束],
  ...
  [主键/外键约束]
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

# 示例:创建用户表 users
CREATE TABLE IF NOT EXISTS users (
  id INT PRIMARY KEY AUTO_INCREMENT,  # 自增主键
  username VARCHAR(50) NOT NULL UNIQUE,  # 用户名(非空+唯一)
  age INT DEFAULT 0,  # 年龄(默认0)
  created_at DATETIME DEFAULT CURRENT_TIMESTAMP  # 创建时间(默认当前时间)
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

  • 常用数据类型:INT(整数)、VARCHAR(n)(字符串,n 为最大长度)、DATETIME(日期时间)、TEXT(长文本)。
  • 常用约束:PRIMARY KEY(主键)、NOT NULL(非空)、UNIQUE(唯一)、DEFAULT(默认值)、AUTO_INCREMENT(自增)。
  • ENGINE=InnoDB:支持事务和外键的存储引擎(默认)。
3. 查看表结构
DESCRIBE users;  # 或 DESC users; 显示表 users 的字段信息
SHOW CREATE TABLE users;  # 查看表的完整创建语句(包括引擎、字符集等)
4. 修改表结构(ALTER TABLE)
# 添加字段
ALTER TABLE users ADD COLUMN email VARCHAR(100) UNIQUE;

# 修改字段类型/约束
ALTER TABLE users MODIFY COLUMN age TINYINT DEFAULT 18;  # 年龄改为 tinyint(范围更小)

# 重名字段
ALTER TABLE users CHANGE COLUMN old_name new_name VARCHAR(50);  # CHANGE 可同时修改名称和类型

# 删除字段
ALTER TABLE users DROP COLUMN email;

# 重命名表
ALTER TABLE users RENAME TO user_info;
5. 删除表
DROP TABLE [IF EXISTS] users;  # 删除表(谨慎操作,数据不可恢复)

四、数据操作(CRUD)

1. 插入数据(CREATE)
# 基本语法:INSERT INTO 表名 (字段1, 字段2, ...) VALUES (值1, 值2, ...);
INSERT INTO users (username, age) VALUES ('zhangsan', 25);  # 指定字段插入

# 插入多条数据
INSERT INTO users (username, age) 
VALUES 
  ('lisi', 30),
  ('wangwu', 28);

# 省略字段(需按表结构顺序插入所有字段,自增主键可省略)
INSERT INTO users VALUES (NULL, 'zhaoliu', 35, NULL);  # id自增,created_at用默认值
2. 查询数据(READ)
# 基本查询
SELECT * FROM users;  # 查询 users 表所有字段的所有记录(* 表示所有字段)

# 指定字段查询
SELECT username, age FROM users;

# 带条件查询(WHERE)
SELECT * FROM users WHERE age > 25;  # 查询年龄大于25的用户
SELECT * FROM users WHERE username LIKE 'zhang%';  # 模糊查询(用户名以zhang开头)

# 排序(ORDER BY)
SELECT * FROM users ORDER BY age DESC;  # 按年龄降序排列(DESC降序,ASC升序默认)

# 限制结果数量(LIMIT)
SELECT * FROM users LIMIT 10;  # 只返回前10条记录
SELECT * FROM users LIMIT 5, 10;  # 从第5条开始,返回10条(分页常用)

# 聚合查询(COUNT/SUM/AVG等)
SELECT COUNT(*) AS total FROM users;  # 统计总记录数(AS 起别名)
SELECT AVG(age) AS avg_age FROM users;  # 计算平均年龄

# 分组查询(GROUP BY)
SELECT age, COUNT(*) FROM users GROUP BY age;  # 按年龄分组,统计每组人数
3. 更新数据(UPDATE)
# 基本语法:UPDATE 表名 SET 字段1=值1, 字段2=值2 WHERE 条件;
UPDATE users SET age = 26 WHERE username = 'zhangsan';  # 更新指定用户的年龄

# 批量更新(谨慎使用,若无WHERE会更新所有记录)
UPDATE users SET created_at = '2023-01-01 00:00:00' WHERE age < 20;

  • 必须加 WHERE 条件:否则会更新表中所有记录,造成数据灾难!
4. 删除数据(DELETE)
# 基本语法:DELETE FROM 表名 WHERE 条件;
DELETE FROM users WHERE username = 'lisi';  # 删除指定用户

# 清空表(保留表结构,自增ID会重置)
TRUNCATE TABLE users;  # 比 DELETE FROM users 更高效,但无法回滚

  • 必须加 WHERE 条件:否则会删除表中所有记录!
  • TRUNCATE 与 DELETE 区别:TRUNCATE 是 DDL 操作,删除所有数据并重置自增 ID,无法回滚;DELETE 是 DML 操作,可回滚,自增 ID 不重置。

五、索引操作

索引用于加速查询,常见类型:主键索引(PRIMARY KEY)、唯一索引(UNIQUE)、普通索引(INDEX)。

1. 创建索引
# 普通索引(最常用)
CREATE INDEX idx_age ON users(age);  # 为 users 表的 age 字段创建索引

# 唯一索引(字段值唯一,如邮箱)
CREATE UNIQUE INDEX idx_email ON users(email);

# 复合索引(多字段组合,适合频繁联合查询的场景)
CREATE INDEX idx_name_age ON users(username, age);
2. 查看索引
SHOW INDEX FROM users;  # 查看 users 表的所有索引
3. 删除索引
DROP INDEX idx_age ON users;  # 删除 users 表的 idx_age 索引

六、用户与权限管理

1. 创建用户
# 基本语法:CREATE USER '用户名'@'主机' IDENTIFIED BY '密码';
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'App@123';  # 仅允许本地登录
CREATE USER 'appuser'@'%' IDENTIFIED BY 'App@123';  # 允许所有主机登录(% 表示任意IP)
  • 主机 限制登录来源:localhost(本地)、192.168.1.%(指定网段)、%(所有主机)。
2. 授权用户

sql

# 基本语法:GRANT 权限 ON 数据库.表 TO '用户'@'主机';
GRANT SELECT, INSERT, UPDATE ON mydb.users TO 'appuser'@'%';  # 授予对 mydb.users 表的增查改权限
GRANT ALL PRIVILEGES ON mydb.* TO 'appuser'@'%';  # 授予对 mydb 库所有表的所有权限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';  # 授予所有库表的所有权限(超级管理员)

# 授权后刷新权限
FLUSH PRIVILEGES;

  • 常用权限:SELECT(查询)、INSERT(插入)、UPDATE(更新)、DELETE(删除)、CREATE(创建)、DROP(删除)、ALL PRIVILEGES(所有权限)。
3. 查看用户权限
SHOW GRANTS FOR 'appuser'@'%';  # 查看 appuser 的权限
4. 撤销权限
REVOKE DELETE ON mydb.users FROM 'appuser'@'%';  # 撤销删除权限
FLUSH PRIVILEGES;  # 刷新权限
5. 删除用户
DROP USER 'appuser'@'%';  # 删除用户

七、其他常用命令

1. 查看 MySQL 版本
SELECT VERSION();
2. 查看当前用户
SELECT USER();
3. 事务操作(InnoDB 支持)
BEGIN;  # 开始事务
UPDATE users SET age = 27 WHERE id = 1;
INSERT INTO logs (content) VALUES ('更新了用户年龄');
COMMIT;  # 提交事务(所有操作生效)
# ROLLBACK;  # 若出错,回滚事务(所有操作撤销)
4. 导入 / 导出数据
# 导出数据库(终端命令,非SQL)
mysqldump -u root -p mydb > mydb_backup.sql  # 导出 mydb 库到文件

# 导入数据库(终端命令)
mysql -u root -p mydb < mydb_backup.sql  # 导入文件到 mydb 库

# 导出指定表
mysqldump -u root -p mydb users > users_backup.sql

总结

MySQL 命令可分为以下几类核心场景:

  • 库表管理:CREATE DATABASE/TABLE、ALTER TABLE、DROP 等。
  • 数据操作:INSERT、SELECT、UPDATE、DELETE(CRUD)。
  • 索引与优化:CREATE INDEX 提升查询效率。
  • 权限控制:CREATE USER、GRANT 管理访问权限。

实际使用中,SELECT 配合 WHERE、ORDER BY、LIMIT 是查询数据的基础,而 UPDATE 和 DELETE 必须加 WHERE 条件以避免误操作。对于复杂业务,需结合事务(BEGIN/COMMIT)保证数据一致性。

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐