[MySQL]基础操作
DDL基本操作
1.数据库操作
查询
查询所有数据库
1 | SHOW DATABASES; |
查询当前的数据库
1 | SELECT DATABASE(); |
创建数据库
1 | CREATE DATABASE [IF NOT EXISTS] 数据库名 [DEFAULT CHARSET 字符集] [COLLATE 排列顺序]; |
注:[ ]内可不写
删除数据库
1 | DROP DATABASE [IF EXISTS] 数据库名; |
使用数据库
1 | USE 数据库名; |
查询当前数据库中所有的表
1 | SHOW TABLES; |
查询表结构
1 | DESC 表名; |
查询指定表的建表语句
1 | SHOW CREATE TABLE 表名; |
###创建
创建表
1 | CREATE TABLE 表名( |
注:[…]内为可选项 最后一个字段后没有逗号
在MySQL中字符串数据类型varchar(…)为变长字符串括号内为字符最大容量
示例
1 | create table tb_test1( |
经过DESC 表名;语句的显示效果
1 | +--------+-------------+------+-----+---------+-------+ |
经过SHOW CREATE TABLE 表名;语句的显示效果
1 | +----------+------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------+ |
修改
添加字段
1 | ALTER TABLE 表名 ADD 字段名 类型(长度) [COMMENT 注释] [约束]; |
修改原有字段数据类型
1 | ALTER TABLE 表名 MODIFY 字段名 新数据类型(长度); |
查询表结构
1 | ALTER TABLE 表名 CHANGE 旧字段名 新字段名 类型(长度) [COMMENT 注释] [约束]; |
删除字段
1 | ALTER TABLE 表名 DROP 字段名; |
修改表名
1 | ALTER TABLE 表名 RENAME TO 新表名; |
删除
删除表
1 | DROP TABLE [IF EXISTS] 表名; |
删除指定表,并重新创建该表
1 | TRUNCATE TABLE 表名; |
1. 数值类型 (Numeric Types)
这里有一个重点:Java 的 long 对应 MySQL 的 BIGINT,钱(货币)一定要用 DECIMAL。
| 数据类型 | 大小 (存储空间) | 描述与应用场景 | 对应 Java 类型 |
|---|---|---|---|
TINYINT |
1 byte | 非常小的整数。常用 TINYINT(1) 来表示 布尔值 (Boolean) (0为假, 1为真)。 |
Byte / Boolean |
SMALLINT |
2 bytes | 小整数。范围约 $\pm 3$ 万。 | Short |
MEDIUMINT |
3 bytes | 中等大小整数。范围约 $\pm 800$ 万 (很少用)。 | Integer |
INT / INTEGER |
4 bytes | 最常用的整数。范围约 $\pm 21$ 亿。 | Integer |
BIGINT |
8 bytes | 极大整数。通常用于 主键 ID 或像推特点击量这种大数。 | Long |
FLOAT |
4 bytes | 单精度浮点数。不精确,存在精度丢失问题。 | Float |
DOUBLE |
8 bytes | 双精度浮点数。精度比 Float 高,但仍 不精确。 | Double |
DECIMAL(M, D) |
变长 (取决于M) | 定点数 (精确值)。M是总位数,D是小数位。涉及金额/财务必用此类型。 | BigDecimal |
2. 字符串与二进制类型 (String & Binary Types)
重点区分:CHAR 是定长(死板),VARCHAR 是变长(灵活)。
| 数据类型 | 大小 (存储空间) | 描述与应用场景 | 对应 Java 类型 |
|---|---|---|---|
CHAR(M) |
M bytes (0-255) | 定长字符串。如果你存 “A”,它也会占满 M 个空间。适合存固定长度数据 (如身份证、手机号、性别)。速度快但费空间。 | String |
VARCHAR(M) |
变长 (0-65535) | 变长字符串。存多少占多少+长度标识位。开发中最常用的字符串类型 (如用户名、地址)。 | String |
TINYTEXT |
0-255 bytes | 短文本。 | String |
TEXT |
0-64 KB | 长文本。适合存文章内容、评论、简介。 | String |
MEDIUMTEXT |
0-16 MB | 中长文本。适合存书的内容。 | String |
LONGTEXT |
0-4 GB | 极长文本。甚至可以把一整本百科全书存进去。 | String |
BLOB 系列 |
变长 | 二进制大对象。用于存图片、音频等 (通常不建议直接存数据库,建议存文件路径)。 | byte[] |
JSON |
变长 | JSON 文档。MySQL 5.7+ 支持。适合存非结构化数据,能直接解析 Key-Value。 | String / Object |
3. 日期与时间类型 (Date & Time Types)
重点区分:TIMESTAMP 会随时区变化,DATETIME 不会。
| 数据类型 | 大小 (存储空间) | 描述与应用场景 | 对应 Java 类型 |
|---|---|---|---|
DATE |
3 bytes | 仅日期。格式:YYYY-MM-DD。如:生日 1990-01-01。 |
java.sql.Date / LocalDate |
TIME |
3 bytes | 仅时间。格式:HH:MM:SS。如:时长 12:30:00。 |
java.sql.Time / LocalTime |
YEAR |
1 byte | 年份。格式:YYYY (1901-2155)。 |
Integer / Year |
DATETIME |
8 bytes | 日期+时间。范围:1000年到9999年。绝对时间,存进去是什么,取出来就是什么,不理会时区。 | LocalDateTime |
TIMESTAMP |
4 bytes | 时间戳。范围:1970年到2038年。涉及时区转换 (存进去会转成UTC,取出来转回当前时区)。适合记录“创建时间/修改时间”。 | Timestamp / Instant |
DML基础操作
增
给指定字段添加数据
1 | INSERT INTO 表名 (字段名1,字段名2,字段名3,...) VALUES (值1,值2,值3,...); |
给全部字段添加数据
1 | INSERT INTO 表名 VALUES (值1,值2,值3,...); |
批量添加数据
1 | INSERT INTO 表名 (字段名1,字段名2,字段名3,...) VALUES (值1,值2,值3,...),(值1,值2,值3,...),...; |
1 | INSERT INTO 表名 VALUES (值1,值2,值3,...),(值1,值2,值3,...),(值1,值2,值3,...),...; |
删
1 | DELETE FROM 表名 WHERE 条件 |
注:
1.若不写where语句则是删除整张表的所有数据
2.delete不能删除某一个字段的值 可以用updata设置成null
改
1 | UPDATA 表名 SET 字段名1 = 值1, 字段名2 = 值2, ... WHERE 条件; |
注:要是不写where语句则是修改整张表的字段的值
DQL基本操作
1.基本查询
查询多个字段
1 | SELECT 字段1 AS '别名',字段2 '别名',字段3,...FROM 表名; |
去除重复记录
1 | SELECT DISTINCT 字段列表 FROM 表名; |
2.条件查询
语法
1 | SELECT 字段列表 FROM 表名 WHERE 条件列表; |
条件
| 比较运算符 | 功能 |
|---|---|
| > | 大于 |
| >= | 大于等于 |
| < | 小于 |
| <= | 小于等于 |
| = | 等于 |
| <> 或 != | 不等于 |
| BETWEEN 最小值 AND 最大值 | 在某个范围之内(含最大最小值) |
| IN(…) | 至少符合IN列表中一项的数据 |
| LIKE 占位符 | 模糊匹配:’_’ : 任意一个字符 ‘%’ : 任意个字符 |
| IS NULL | 是NULL |
| 逻辑运算符 | 功能 |
|---|---|
| AND 或 && | 与 |
| OR 或 || | 或 |
| NOT 或! | 非 |
3.聚合函数
将一列数据作为一个整体 进行纵向计算
| 函数 | 功能 |
|---|---|
| count | 统计数量 |
| max | 最大值 |
| min | 最小值 |
| avg | 平均值 |
| sum | 求和 |
语法
1 | SELECT 聚合函数(字符列表) FROM 表名; |
注:null值不参与聚合函数的运算!
4.分组查询
语法
1 | SELECT 字段列表 FROM 表名 [WHERE 条件] GROUP BY 分组字段名 [HAVING 分组后的过滤条件]; |
WHERE与HAVING的区别
where是在分组之前进行的过滤 满足where条件的才可进行分组
having是分组之后进行的过滤
执行顺序
where > 聚合函数 > having
5.排序查询
1.语法
1 | SELECT 字段列表 FROM 表名 ORDER BY 字段1 排序方式1, 字段2 排序方式2...; |
2.排序方式
1.升序:ASC(默认值)
2.降序:DESC
6.分页查询
1.语法
1 | SELECT 字段列表 FROM 表名 LIMIT 起始索引, 查询录数; |
2.示例
若查询的数据每一页有十个数据,那么我查询第一页的代码是
SELECT 字段列表 FROM 表名 LIMIT 0, 10;
如果是第一页则起始索引可以省略:
SELECT 字段列表 FROM 表名 LIMIT 10;
查询第二页的代码为:
SELECT 字段列表 FROM 表名 LIMIT 10, 10;
查询第n页的起始索引可以通过(页数 - 1)* 查询录数计算得出
注:索引是从0开始的!
7.DQL的编写顺序
1 | SELECT |
8.DQL的执行顺序
1 | FROM |
函数
1.字符串函数
1 | -- 字符串拼接 |
2.数值函数
1 | -- 向上取整 |
3.日期函数
1 | -- 返回当前日期 |
4.流程函数
| 函数 | 功能 |
|---|---|
| if(value, t, f) | 如果value为true,返回t,否则返回f |
| ifnull(value 1, value 2) | 如果value 1不为空则返回value 1,否则返回value 2 |
| case when [val1] then [res1]…else[default] end | 如果val1为true,返回res1,…否则返回default默认值 |
| case [expr] when [val1] then [res1]…else[def] end | 如果expr的值等于val1,返回res1,…否则返回def |
多表查询例题
1 | -- ------------------------------------> 多表查询 <-------------------------------------------- |


