一、数据类型
1. 数字类型
| 类型 | 字节数 | 取值范围 | 说明 |
|---|---|---|---|
| TINYINT | 1 | -128 ~ 127 | 极小整数 |
| SMALLINT | 2 | -32768 ~ 32767 | 小整数 |
| MEDIUMINT | 3 | -8388608 ~ 8388607 | 中等整数 |
| INT | 4 | -2147483648 ~ 2147483647 | 标准整数 |
| BIGINT | 8 | -9223372036854775808 ~ 9223372036854775807 | 大整数 |
| FLOAT | 4 | ±3.402823466E+38 | 单精度浮点数 |
| DOUBLE | 8 | ±1.7976931348623157E+308 | 双精度浮点数 |
| DECIMAL(M,D) | 可变 | 取决于M和D | M=总位数,D=小数位数,精确小数 |
2. 字符串类型
| 类型 | 说明 | 特点 |
|---|---|---|
| CHAR(m) | 定长字符串 | 固定长度,效率高,浪费空间 |
| VARCHAR(m) | 可变长字符串 | 根据内容长度存储,节省空间 |
| TEXT | 长文本 | 存储大段文本内容 |
| ENUM('A','B') | 枚举类型 | 限定只能取括号中列出的值 |
3. 日期时间类型
| 类型 | 格式 | 说明 |
|---|---|---|
| DATE | YYYY-MM-DD | 日期,不含时间 |
| TIME | HH:MM:SS | 时间,不含日期 |
| DATETIME | YYYY-MM-DD HH:MM:SS | 日期+时间 |
| TIMESTAMP | YYYY-MM-DD HH:MM:SS | 时间戳,受时区影响 |
二、表操作
创建时间自动生成
| 语法 | 说明 |
|---|---|
create_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP |
插入时自动记录当前时间 |
修改时间自动更新
| 语法 | 说明 |
|---|---|
update_time TIMESTAMP DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP |
插入时记录当前时间,更新时自动刷新 |
软删除
| 操作 | SQL语句 | 说明 |
|---|---|---|
| 添加删除标记列 | ALTER TABLE 表名 ADD is_delete TINYINT DEFAULT 0; |
默认0表示未删除 |
| 软删除记录 | UPDATE 表名 SET is_delete = 1 WHERE id = 2; |
标记为已删除 |
| 查询全部(含已删) | SELECT * FROM 表名; |
慎用,通常需过滤 |
三、查询语句(SELECT)
1. 基础查询
| 查询方式 | 语法 | 说明 |
|---|---|---|
| 查询全部列 | SELECT * FROM 表名; |
返回所有列 |
| 查询部分列 | SELECT 列名1, 列名2 FROM 表名; |
只返回指定列 |
| 指定表名 | SELECT 表名.列名 FROM 表名; |
多表查询时明确来源 |
| 列别名 | SELECT 列名 AS 别名 FROM 表名; |
为列起别名显示 |
2. 条件查询(WHERE)
比较运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
= |
等于 | WHERE age = 18 |
!= 或 <> |
不等于 | WHERE age != 18 或 WHERE age <> 18 |
< |
小于 | WHERE age < 18 |
<= |
小于等于 | WHERE age <= 18 |
> |
大于 | WHERE age > 18 |
>= |
大于等于 | WHERE age >= 18 |
逻辑运算符
| 运算符 | 含义 | 示例 |
|---|---|---|
AND |
与(同时满足) | WHERE age > 18 AND gender = '男' |
OR |
或(满足其一) | WHERE age < 18 OR age > 60 |
NOT |
非(取反) | WHERE NOT gender = '男' |
空值判断
| 语法 | 说明 |
|---|---|
WHERE 字段 IS NULL |
查询字段为空 |
WHERE 字段 IS NOT NULL |
查询字段非空 |
范围查询
| 语法 | 说明 | 示例 |
|---|---|---|
BETWEEN a AND b |
在a和b之间(含边界) | WHERE age BETWEEN 18 AND 25 |
IN (a,b,c) |
在枚举值列表中 | WHERE id IN (1, 2, 3) |
模糊查询(LIKE)
| 通配符 | 含义 | 示例 |
|---|---|---|
% |
匹配任意个字符(含0个) | WHERE name LIKE '黄%'(姓黄) |
_ |
匹配单个字符 | WHERE name LIKE '黄_'(姓黄且名字2个字) |
四、聚合函数
| 函数 | 作用 | 示例 |
|---|---|---|
MIN(列名) |
求最小值 | SELECT MIN(age) FROM 用户表; |
AVG(列名) |
求平均值 | SELECT AVG(age) FROM 用户表; |
SUM(列名) |
求和 | SELECT SUM(salary) FROM 员工表; |
COUNT(列名) |
统计个数 | SELECT COUNT(*) FROM 用户表; |
五、排序(ORDER BY)
| 关键词 | 含义 |
|---|---|
ASC |
升序(默认,从小到大) |
DESC |
降序(从大到小) |
排序语法
| 类型 | 语法 | 说明 |
|---|---|---|
| 单条件排序 | ORDER BY 列名 ASC/DESC |
按一列排序 |
| 多条件排序 | ORDER BY 列名1 ASC, 列名2 DESC |
先按列1排,再按列2排 |
六、分页(LIMIT)
| 语法 | 含义 | 示例 |
|---|---|---|
LIMIT n |
返回前n条 | LIMIT 10(前10条) |
LIMIT start, count |
从start开始返回count条(start从0开始) | LIMIT 0, 10(第1页) |
| 分页公式 | LIMIT (n-1)*m, m |
每页m条,第n页 |
七、分组与过滤
分组(GROUP BY)
| 语法 | 说明 |
|---|---|
GROUP BY 列名 |
按指定列分组 |
SELECT 列名, COUNT(*) FROM 表 GROUP BY 列名 |
分组后统计每组数量 |
过滤(HAVING)
| 语法 | 说明 |
|---|---|
HAVING 条件 |
对GROUP BY后的分组结果进行过滤 |
| 示例 | GROUP BY is_delete HAVING COUNT(*) > 5(筛选分组数量大于5的组) |
八、备份与恢复
| 操作 | 命令 | 说明 |
|---|---|---|
| 备份 | mysqldump -uroot -p 数据库名 > 数据库名.sql |
将数据库导出为SQL文件 |
| 恢复 | mysql -uroot -p 数据库名 < 数据库名.sql |
从SQL文件导入恢复数据库 |