MySQL 速查表
一份可搜索、可打印的 MySQL 参考——查询、连接、索引、函数、数据类型和管理命令。免费。
查询
10SELECT * FROM users;
选择所有列和行
SELECT id, name FROM users;
选择特定列
SELECT DISTINCT city FROM users;
仅唯一值
WHERE age > 18 AND active = 1
按条件过滤行
WHERE name LIKE 'A%'
模式匹配(% = 任意字符)
WHERE id IN (1, 2, 3)
匹配集合中的任一值
WHERE age BETWEEN 18 AND 30
闭区间范围过滤
ORDER BY created_at DESC
降序排序
LIMIT 10 OFFSET 20
分页结果
WHERE email IS NULL
匹配空值
连接
8INNER JOIN orders ON orders.user_id = users.id
两表中均匹配的行
LEFT JOIN orders ON ...
全部左表行 + 匹配项
RIGHT JOIN orders ON ...
全部右表行 + 匹配项
CROSS JOIN colors
笛卡尔积
SELF JOIN: FROM emp e JOIN emp m ON e.mgr = m.id
表自连接
USING (user_id)
按同名列连接
UNION / UNION ALL
合并结果集
SELECT u.*, o.total FROM users u JOIN orders o
为表设别名以便清晰
聚合
9COUNT(*)
统计行数
SUM(amount)
数值列的合计
AVG(price)
平均值
MIN(price), MAX(price)
最小值和最大值
GROUP BY country
对行分组以聚合
HAVING COUNT(*) > 5
对聚合分组进行过滤
GROUP_CONCAT(name)
拼接分组值
COUNT(DISTINCT city)
统计唯一值数量
ROW_NUMBER() OVER (ORDER BY id)
窗口函数排名
修改数据
8INSERT INTO users (name) VALUES ('Sam');
插入单行
INSERT INTO users (name) VALUES ('A'),('B');
插入多行
UPDATE users SET active = 1 WHERE id = 5;
更新匹配的行
DELETE FROM users WHERE id = 5;
删除匹配的行
TRUNCATE TABLE logs;
快速删除所有行
INSERT ... ON DUPLICATE KEY UPDATE
按唯一键 upsert
REPLACE INTO users ...
冲突时删除并插入
INSERT IGNORE INTO ...
跳过会报错的行
模式 / DDL
9CREATE TABLE users (id INT PRIMARY KEY);
创建新表
AUTO_INCREMENT
自动编号列
ALTER TABLE users ADD COLUMN age INT;
添加列
ALTER TABLE users DROP COLUMN age;
删除列
ALTER TABLE users MODIFY name VARCHAR(100);
更改列类型
DROP TABLE IF EXISTS users;
删除表
FOREIGN KEY (user_id) REFERENCES users(id)
引用另一个表
ON DELETE CASCADE
级联删除子记录
CREATE TABLE t2 LIKE t1;
复制表结构
索引与键
8PRIMARY KEY (id)
唯一行标识符
UNIQUE (email)
强制唯一值
CREATE INDEX idx_name ON users (name);
加速列上的查找
CREATE INDEX idx_ab ON t (a, b);
复合(多列)索引
DROP INDEX idx_name ON users;
删除索引
FULLTEXT (body)
全文搜索索引
EXPLAIN SELECT ...;
显示查询计划
SHOW INDEX FROM users;
列出表上的索引
数据类型
9INT, BIGINT, TINYINT
按大小分的整数类型
DECIMAL(10, 2)
精确定点数
VARCHAR(255)
可变长度字符串
TEXT, LONGTEXT
大型文本块
DATE, DATETIME, TIMESTAMP
日期和时间类型
BOOLEAN (TINYINT(1))
true/false 存为 0/1
JSON
原生 JSON 文档列
ENUM('a', 'b')
固定取值集合之一
UNSIGNED
非负数值修饰符
Type sizes & limits
20TINYINT
1 byte: -128..127 (0..255 UNSIGNED)
SMALLINT
2 bytes: -32,768..32,767 (0..65,535)
MEDIUMINT
3 bytes: -8.39M..8.39M (0..16.78M)
INT
4 bytes: -2.15B..2.15B (0..4.29B)
BIGINT
8 bytes: ±9.22×10^18 (0..1.84×10^19)
DECIMAL(M, D)
Exact: M up to 65 digits, D up to 30
FLOAT / DOUBLE
4 / 8 bytes approximate floating point
CHAR(M)
Fixed length, 0..255 characters
VARCHAR(M)
0..65,535 bytes (shared 64KB row limit)
TINYTEXT
Up to 255 bytes (~255 chars)
TEXT
Up to 65,535 bytes (64 KB)
MEDIUMTEXT
Up to 16,777,215 bytes (16 MB)
LONGTEXT
Up to 4,294,967,295 bytes (4 GB)
BLOB types
TINY/—/MEDIUM/LONG: 255B..4GB (binary)
JSON
Stored as LONGBLOB, up to ~4 GB
ENUM / SET
ENUM: 65,535 members; SET: 64 members
DATE
1000-01-01 to 9999-12-31 (3 bytes)
DATETIME
1000 to 9999, microseconds (5–8 bytes)
TIMESTAMP
1970-01-01 to 2038-01-19 UTC (4 bytes)
TIME / YEAR
±838:59:59 / 1901..2155
函数
9NOW(), CURDATE()
当前日期时间 / 日期
DATE_FORMAT(d, '%Y-%m-%d')
格式化日期
DATEDIFF(a, b)
两个日期之间的天数
CONCAT(a, ' ', b)
连接字符串
COALESCE(a, b, 'n/a')
第一个非空值
IFNULL(x, 0)
用默认值替换 null
CASE WHEN x > 0 THEN '+' ELSE '-' END
条件表达式
CAST(x AS CHAR)
转换值类型
ROUND(x, 2)
四舍五入到小数位
事务与管理
9START TRANSACTION;
开始事务
COMMIT;
提交事务
ROLLBACK;
回滚事务
SAVEPOINT sp1;
设置回滚点
SHOW TABLES;
列出数据库中的表
DESCRIBE users;
显示表结构
SHOW PROCESSLIST;
列出运行中的连接
GRANT ALL ON db.* TO 'u'@'%';
授予用户权限
mysqldump -u root db > db.sql
备份数据库(CLI)
没有条目匹配“:q”。
需要帮助?
使用此工具时遇到问题?请告诉我们的团队。