数据库基础——库和表的操作
文章目录
数据库的操作
显示当前数据库
show databases;
创建数据库
create database [if not exists] + 数据库名字 + character set / charset + 常见字符集名字;
说明:
- if not exists 是指没有的情况下才创建
- character set / charset 用于指定字符集(常见的字符集: gbk, utf8, utf8mb4)
- MySQL 的utf8编码并不是真正的utf8,没有包含某些复杂的中文字符,MySQL真正的utf8是使用utf8mb4,建议大家都使用utf8mb4
使用数据库
use + 数据库名字;
说明:
- 对数据库中的表进行操作
删除数据库
drop + database + [if not exists] + 数据库名字;
说明:
- 数据库删除之后,内部就看不到对应的数据库,里面的表和数据全部都被删除
常用的数据类型
数值类型
| 数据类型 | 大小 | 说明 | 对应 Java 类型 |
|---|---|---|---|
| BIT[(M)] | M 指定位数,默认 1 位 | 二进制数,M 范围从 1 到 64,存储数值范围从 0 到 2^M - 1 | Boolean |
| TINYINT | 1 字节 | Byte | |
| SMALLINT | 2 字节 | Short | |
| INT | 4 字节 | Integer | |
| BIGINT | 8 字节 | Long | |
| FLOAT[(M, D)] | 4 字节 | 单精度,M 指定长度,D 指定小数位数,会发生精度丢失 | Float |
| DOUBLE[(M, D)] | 8 字节 | Double | |
| DECIMAL[(M, D)] | M/D 最大值 +2 | 双精度,M 指定长度,D 表示小数点位数,精确数值 | BigDecimal |
| NUMERIC[(M, D)] | M/D 最大值 +2 | 和 DECIMAL 一样 | BigDecimal |
拓展:
- 数值类型可以指定为无符号(unsigned),表示不取负数
- 一个字节 == 8 个比特位
- 尽量不使用unsigned,对于int类型可能存不下的数据,int unsigned同样可能存不下,与其如此,还不如设计的时候,将int类型提升为bigint类型
- 对于整型类型的范围:
- 有符号范围:到 2^(类型字节数8 -1) -1 到 2^(类型字节数8 -1) -1 ,如int是4字节,就是-2^31 到 2^31-1
- 无符号范围:0 到 2^(类型字节数*8) -1 ,如uint是4字节,就是0 到 2^32-1
字符串类型和日期类型
字符串类型:
| 数据类型 | 大小 | 说明 | 对应 Java 类型 |
|---|---|---|---|
| VARCHAR(SIZE) | 0-65,535字节 | 可变长度字符串 | String |
| TEXT | 0-65,535字节 | 长文本数据 | String |
| MEDIUMTEXT | 0-16,777,215字节 | 中等长度文本数据 | String |
| BLOB | 0-65,535字节 | 二进制形式的长文本数据 | byte[] |
日期类型:
| 数据类型 | 大小 | 说明 | 对应 Java 类型 |
|---|---|---|---|
| DATETIME | 8 字节 | 范围从1000到9999年,不会进行时区的检查及转换。 | java.util.Date、java.sql.Timestamp |
| TIMESTAMP | 4 字节 | 范围从1970到2038年,自动检索当前时区并进行转换。 | java.util.Date、java.sql.Timestamp |
表的操作
想要操作数据库中的表,需要先使用该数据库
use + 数据库名字;
查看该表的结构
desc + 表名;
说明:
- 显示不同列的名字以及对应的类型和索引等等,例如:

查看表
show tables;
说明:
- 用于查看该数据库里面,所有的表有哪些(显示表的名字)

创建表
create table + 表名(列名 类型, 列名 类型, .....);
说明:
- 也可以在类型后面+comment增加字段说明
- 例如: name varchar(20)comment ‘姓名’
删除表
drop table + 表名;
增删改查
增
1.全部列进行插入:
只有一条数据时:insert into + 表名 + values(值, 值, ....);
多条数据时:insert into + 表名 + values(值, 值, ....),(值, 值, ....), ......;
2.只针对某一列进行插入:
只有一条数据时:insert into + 表名(列名) + values(值);
多条数据时:insert into + 表名(列名) + values(值),(值), ....;
说明:
- 假如插入某一条中文数据,或者使用中文给某一列进行命名,需注意一下情况:
| 场景 | 是否需要引号? | 符号类型 | 示例 |
|---|---|---|---|
| 中文列名(标识符) | 视数据库而定(可选) | 反引号 / 方括号 / 双引号 | CREATE TABLE 学生表 (…) |
| 中文数据(值) | 必须 | 单引号 ’ ’ | VALUES (‘张三’, 20) |
- 假如是针对多个列进行插入数据,但并非是全部列的情况下,只需要在上面代码块的第二种情况下,在表名后面的列名中写入想要插入数据的列名,并用逗号隔开即可
查
select * from + 表名;
*:通配符,可以查询到表里面所有列的数据
说明:
- 用于查询某一个表里面具体的数据
- 通配符也可以为其他列名字,可以查到该表内某一列的具体数据
- 同时,也支持一些简单的统计操作(例如:math + 10,我们获取到的是math这一列的值加上🔟)
select 列名 as 别名 from 表名;
说明:
- 针对某一个列起别名,以后可以使用别名来代替列名
- 别名可以对表达式,列名,表名起
select distinct 列名 from 表名;
说明:
- distinct这个关键字,可以对列名中重复的数据进行筛选,把重复的数据只保留一个,去除重复的数据
select 列名 from 表名 order by 列名 asc/desc;
说明:
- asc是指升序,desc是指降序
- 假如有明确指定升序或者降序的列名就按照指定的情况来,没有写升序或降序但是写在了order by 后面的列名就默认升序,假如没写在order by 后面就不排序
- 可以对多个字段进行排序,排序优先级随书写顺序
select */列名 from 表名 where 表达式;
| 运算符 | 说明 |
|---|---|
| >, >=, <, <= | 大于, 大于等于, 小于, 小于等于 |
| = | 等于, NULL 不安全,例如 NULL = NULL 的结果是 NULL |
| <=> | 等于, NULL 安全,例如 NULL <=> NULL 的结果是 TRUE(1) |
| !=, <> | 不等于 |
| BETWEEN a0 AND a1 | 范围匹配 [a0, a1],如果 a0 <= value <= a1,返回 TRUE(1) |
| IN (option, …) | 如果是 option 中的任意一个,返回 TRUE(1) |
| IS NULL | 是 NULL |
| IS NOT NULL | 不是 NULL |
| LIKE | 模糊匹配,% 表示任意多个(包括 0 个)任意字符;_ 表示任意一个字符 |
| 运算符 | 说明 |
|---|---|
| AND | 多个条件必须都为 TRUE(1),结果才是 TRUE(1) |
| OR | 任意一个条件为 TRUE(1),结果为 TRUE(1) |
| NOT | 条件为 TRUE(1),结果为 FALSE(0);条件为 FALSE(0),结果为 TRUE(1) |
注:
- WHERE 条件可以使用表达式,但不能使用别名
- AND 的优先级高于 OR,在同时使用时,需要使用小括号包裹优先执行的部分
select * from 表名 limit n/ limit s,n/ limit n offset s;
说明:
- 上面三种情况分别是:从零开始筛选n条数据,从s开始筛选n条数据,从s开始筛选n条
- 第二种比第三种更简洁,但效果一样
- limit后面是代表数据个数,offset后面是代表从哪里开始筛选
改
update 表名 set 列名 = ...;
说明:
- 用于修改某一列的具体数据,假如想要精准到修改某一条数据的话,需要加上where关键字进行筛选
删
delete from 表名;
说明:
- 删除表里面的数据,但是想要删除到某条数据,需要加上where关键字进行筛选
补充说明
- 上述所有增删改查语句,后面都可以加上W(where)O(order by)L(limit offset)三个关键字
- 但是删除基本不需要排序,所以基本不用
- 使用这三个关键字可以更好的对目标数据进行操作


被折叠的 条评论
为什么被折叠?



