持续更新中 · Digital Garden
2026 · 07 · 01 · 第 18
前端 · 后端 · AI · 工程  —  著述与维护 Wyman · Est. MMXXIV · 北京
首页/档案/MySQL 常用命令:CRUD 操作速查
18·MySQL / MYSQL

MySQL 常用命令:CRUD 操作速查

围绕 MySQL 日常增删改查整理常用命令,覆盖连接、库表、查询、插入、更新、删除、事务和导入导出。

占位符说明

占位符含义
<host>数据库主机,例如 127.0.0.1
<port>数据库端口,例如 3306
<user>数据库用户名
<database>数据库名
<table>表名
<column>字段名
<value>字段值
<id>主键 ID
<file>文件路径

连接和基础命令

命令说明
mysql -u <user> -p使用用户名和密码连接本机 MySQL
mysql -h <host> -P <port> -u <user> -p连接指定主机和端口
mysql -u <user> -p <database>连接后直接进入指定数据库
SELECT VERSION();查看 MySQL 版本
SELECT NOW();查看数据库当前时间
SHOW VARIABLES LIKE 'character_set%';查看字符集配置
SHOW VARIABLES LIKE 'time_zone';查看时区配置
STATUS;查看当前连接状态
HELP <command>;查看命令帮助
EXIT;退出 MySQL 客户端

数据库命令

命令说明
SHOW DATABASES;查看所有数据库
CREATE DATABASE <database>;创建数据库
CREATE DATABASE <database> CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;创建数据库并指定字符集
USE <database>;切换数据库
SELECT DATABASE();查看当前数据库
DROP DATABASE <database>;删除数据库

表结构命令

命令说明
SHOW TABLES;查看当前数据库所有表
DESC <table>;查看表字段结构
DESCRIBE <table>;查看表字段结构
SHOW CREATE TABLE <table>;查看建表语句
CREATE TABLE <table> (id BIGINT PRIMARY KEY AUTO_INCREMENT, name VARCHAR(100) NOT NULL);创建简单数据表
ALTER TABLE <table> ADD COLUMN <column> VARCHAR(255);新增字段
ALTER TABLE <table> MODIFY COLUMN <column> VARCHAR(500);修改字段类型
ALTER TABLE <table> DROP COLUMN <column>;删除字段
DROP TABLE <table>;删除表
TRUNCATE TABLE <table>;清空表并重置自增 ID

查询数据

命令说明
SELECT * FROM <table>;查询整张表
SELECT <column>, <column> FROM <table>;查询指定字段
SELECT * FROM <table> WHERE id = <id>;按主键查询
SELECT * FROM <table> WHERE <column> = '<value>';按字段精确查询
SELECT * FROM <table> WHERE <column> LIKE '%keyword%';模糊查询
SELECT * FROM <table> WHERE created_at >= '2026-01-01';按时间范围查询
SELECT * FROM <table> WHERE <column> IS NULL;查询字段为空的数据
SELECT * FROM <table> WHERE <column> IS NOT NULL;查询字段不为空的数据
SELECT * FROM <table> ORDER BY created_at DESC;按时间倒序排序
SELECT * FROM <table> ORDER BY id DESC LIMIT 20;查询最近 20 条数据
SELECT * FROM <table> LIMIT 20 OFFSET 40;分页查询
SELECT COUNT(*) FROM <table>;统计总行数
SELECT <column>, COUNT(*) FROM <table> GROUP BY <column>;分组统计
SELECT DISTINCT <column> FROM <table>;查询字段去重值

连接查询

命令说明
SELECT * FROM users LEFT JOIN orders ON users.id = orders.user_id;左连接查询,保留左表 users 的所有数据
SELECT users.id, users.name, orders.id AS order_id FROM users LEFT JOIN orders ON users.id = orders.user_id;左连接时指定返回字段
SELECT users.id, users.name, orders.id AS order_id FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE users.id = <id>;查询指定用户及其订单
SELECT users.id, users.name FROM users LEFT JOIN orders ON users.id = orders.user_id WHERE orders.id IS NULL;查询没有订单的用户
SELECT users.id, COUNT(orders.id) AS order_count FROM users LEFT JOIN orders ON users.id = orders.user_id GROUP BY users.id;统计每个用户的订单数量,没有订单时结果为 0
SELECT * FROM users INNER JOIN orders ON users.id = orders.user_id;内连接查询,只返回两张表都匹配的数据
SELECT * FROM users RIGHT JOIN orders ON users.id = orders.user_id;右连接查询,保留右表 orders 的所有数据

LEFT JOIN 的核心是保留左表全部记录。右表没有匹配数据时,右表字段会返回 NULL,所以它常用于“查主表列表,同时带上关联表信息”或“找出没有关联数据的记录”。

插入数据

命令说明
INSERT INTO <table> (<column>) VALUES ('<value>');插入单个字段
INSERT INTO <table> (<column>, <column>) VALUES ('<value>', '<value>');插入多个字段
INSERT INTO <table> (<column>, <column>) VALUES ('<value>', '<value>'), ('<value>', '<value>');批量插入
INSERT INTO <table> SET <column> = '<value>', <column> = '<value>';使用 SET 语法插入
INSERT IGNORE INTO <table> (<column>) VALUES ('<value>');插入冲突时忽略错误
INSERT INTO <table> (<column>) SELECT <column> FROM <table>;从查询结果插入数据
SELECT LAST_INSERT_ID();查看最近一次自增 ID

更新数据

命令说明
UPDATE <table> SET <column> = '<value>' WHERE id = <id>;按主键更新
UPDATE <table> SET <column> = '<value>' WHERE <column> = '<value>';按条件更新
UPDATE <table> SET <column> = <column> + 1 WHERE id = <id>;数值递增
UPDATE <table> SET updated_at = NOW() WHERE id = <id>;更新时间字段
UPDATE <table> SET <column> = NULL WHERE id = <id>;将字段更新为空
UPDATE <table> SET status = 'archived' WHERE created_at < '2026-01-01';批量更新历史数据
UPDATE <table> SET <column> = '<value>' ORDER BY id DESC LIMIT 10;限制更新条数

删除数据

命令说明
DELETE FROM <table> WHERE id = <id>;按主键删除
DELETE FROM <table> WHERE <column> = '<value>';按条件删除
DELETE FROM <table> WHERE created_at < '2026-01-01';删除历史数据
DELETE FROM <table> ORDER BY id DESC LIMIT 10;限制删除条数
DELETE FROM <table>;删除表内所有数据,不重置自增 ID
TRUNCATE TABLE <table>;清空表并重置自增 ID

条件和排序常用写法

命令说明
WHERE <column> = '<value>'等于条件
WHERE <column> <> '<value>'不等于条件
WHERE <column> IN ('a', 'b', 'c')匹配多个值
WHERE <column> NOT IN ('a', 'b', 'c')排除多个值
WHERE <column> BETWEEN 1 AND 100区间条件
WHERE <column> >= 1 AND <column> <= 100多条件同时满足
WHERE <column> = 'a' OR <column> = 'b'多条件任意满足
ORDER BY <column> ASC升序排序
ORDER BY <column> DESC降序排序
LIMIT 20限制返回 20 条

事务命令

命令说明
START TRANSACTION;开启事务
BEGIN;开启事务
COMMIT;提交事务
ROLLBACK;回滚事务
SAVEPOINT <name>;创建保存点
ROLLBACK TO SAVEPOINT <name>;回滚到保存点
SET autocommit = 0;关闭自动提交
SET autocommit = 1;开启自动提交

索引和执行计划

命令说明
SHOW INDEX FROM <table>;查看表索引
CREATE INDEX <index_name> ON <table> (<column>);创建普通索引
CREATE UNIQUE INDEX <index_name> ON <table> (<column>);创建唯一索引
DROP INDEX <index_name> ON <table>;删除索引
EXPLAIN SELECT * FROM <table> WHERE id = <id>;查看查询执行计划
EXPLAIN ANALYZE SELECT * FROM <table> WHERE id = <id>;实际执行并分析查询

导入和导出

命令说明
mysqldump -u <user> -p <database> > <file>.sql导出整个数据库
mysqldump -u <user> -p <database> <table> > <file>.sql导出单张表
mysql -u <user> -p <database> < <file>.sql导入 SQL 文件
SELECT * FROM <table> INTO OUTFILE '<file>.csv' FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\n';导出查询结果为 CSV
LOAD DATA INFILE '<file>.csv' INTO TABLE <table> FIELDS TERMINATED BY ',' ENCLOSED BY '\"' LINES TERMINATED BY '\\n';从 CSV 导入数据

常用组合

命令说明
SELECT * FROM <table> WHERE id = <id> LIMIT 1;按主键查询单条数据
SELECT COUNT(*) FROM <table> WHERE <column> = '<value>';统计满足条件的行数
SELECT * FROM <table> WHERE <column> IN ('a', 'b') ORDER BY id DESC LIMIT 20;查询多个状态的最近数据
UPDATE <table> SET deleted_at = NOW() WHERE id = <id>;常见软删除写法
SELECT * FROM <table> WHERE deleted_at IS NULL ORDER BY id DESC LIMIT 20;查询未软删除数据
START TRANSACTION; UPDATE <table> SET <column> = '<value>' WHERE id = <id>; COMMIT;在事务中更新数据
SELECT * FROM <table> WHERE <column> = '<value>' FOR UPDATE;事务内查询并锁定数据行

操作建议

  • 执行 UPDATEDELETE 前,先用相同的 WHERE 写一条 SELECT 确认影响范围。
  • 批量修改数据时,优先放在事务里执行,并准备好回滚方案。
  • 线上操作尽量加上明确条件,避免直接执行无条件的 UPDATEDELETETRUNCATE
  • 查询列表数据时优先指定字段,避免在大表上长期依赖 SELECT *
Wyman · 长空

前端与全栈工程师,写关于系统、边界与 AI 工程的手记。相信把复杂的事讲清楚,本身就是一种工程能力。