mysql常用命令
·
一、连接与退出 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)保证数据一致性。
更多推荐
所有评论(0)