一、数据库基础
1.数据库的操作
显示当前数据库 | show databases; |
创建数据库 | creat databases [if not exists] 表名; |
使用数据库 | use 表名; |
删除数据库 | drop databases [if exists] 表名; |
2.常用数据类型
整型 浮点 型 | bit[(M)] | M指定位数默认1, boolean 默认为1只存0,1 |
tinyint | 1字节,Byte | |
smallint | 2字节,Short | |
int | 4字节,Integer | |
bigint | 8字节,Long | |
float(M,D) | 4字节,M长度D小数位数,Flaot | |
double(M,D) | 8字节,M长度D小数位数,Double | |
decimal(M,D) | M/D最大值+2 M长度D小数位数 BigDecimal | |
numeric(M,D) | M/D最大值+2 M长度D小数位数 BigDecimal | |
字符 串类 型 | varchar(size) | 0-65535字节 可变长度字符串 String |
text | 0-65535字节 长文本数据 String | |
mediumtext | 0-16777215字节 中等长度文本数据 String | |
blob | 0-65535字节 二进制形式的长文本数据 byte[] | |
日期 类型 | datetime | 8字节 1000-9999年 不进行时区检索转换 |
timestamp | 4字节 1970-2038年 自动检索时区并转换 |
3.表的操作
查看表结构 | desc 表名; |
创建表 | creat table 表名( field1 datatype[comment 字段说明], field2 datatype ); |
删除表 | drop table [if exists] 表名; |
二、CRUD 基础
1.表内的增删查改CRUD
插入数据 creat | insert [into] 表名 [(列名1,列名2)] values (数据1),(数据2),(数据3); | |||
查询数据 retrieve | select [distinct] * from 表名 [where ...][order by...][limit...] | |||
全列查询 | select *from 表名; | |||
指定列查询 | select 列名1,列名2,列名3 from 表名 ; | |||
查询字段为表达式 | select (列名1+列名2+列名3) from 表名; | |||
别名 | select 列名1 [as] 别名 from 表名; | |||
去重 distinct | select distinct 列名 from 表名; | |||
排序 order by | select 列名 1,列名2 from 表名 order by 列名1 asc/desc 列1比列2优先级高 先按照列1排列 列1相等的情况下按照列2排列 | |||
条件查询 where | selet 列名1 from 表名 where... | |||
分页查询 limit | select ... from 表名 limit s,n; 从s开始筛选n条结果 | select...from 表名 limit n; 从0开始筛选n条结果 | select...from 表名 limit n offset s; 从s开始筛选n条结果 | |
修改数据 updat | updat 表名 set 列名 = ... | |||
删除数据 delete | delete from 表名 [where...] [ order by ...][limit...] |
2.条件查询:WHERE
比较 运算符 | > >= < <= | 大于 大于等于 小于小于等于 |
= | 等于 null不安全 | |
<=> | 等于 null安全 | |
!= <> | 不等于 | |
between A and B | 范围匹配 日期默认格式:yyyy-mm-dd hh:mm:ss | |
in(option,...) | 若是option中任意一个则true | |
is null | 是null | |
is not null | 不是null | |
like | 模糊匹配 %表示多个任意字符 _表示一个任意字符 | |
合并 运算符 | and | 于 and 优先级高于 or |
or | 或 | |
not | 非 |
三、CRUD 进阶
1.数据库约束
not null | 指示某列不能存储null值 | eg: id int not null: |
unique | 保证某列每一行必须有唯一值 | eg: sn int uniqu |
default | 规定 给未赋初值的列为默认值 | eg:name varchar(20)default ‘MIKE’ |
primary key | 主键约束 非空不重复 | eg:id int primary key auto_increment; |
foreign key | 外键约束 保证一个表中的数据匹配另一个表的值得参照完整性 | eg:foreign key (字段名) references 主表(列) |
check | 保证列中的值符合指定条件 |
2.表的设计
一对一 使用外键 | 一对多 使用外键在“1”的一方 | 多对多 使用外键,找出联系俩表的表,构造俩个一对多 |
3.新增
insert into 表名1(列名1,列名2)select 列名1,列名2 from 表名2; | 将表2的列1 列2复制到表1的列1列2 |
4.查询
4.1聚合函数
count([distinct] expr) | 返回查询到数据的数量 |
sum([distinct] expr) | 返回查询到数据的总和,非数字无意义 |
avg([distinct] expr) | 返回查询到数据的平均数,非数字无意义 |
max([distinct] expr) | 返回查询到数据的最大值,非数字无意义 |
min([distinct] expr) | 返回查询到数据的最小值,非数字无意义 |
4.2聚合查询
group by | select ...from 表名 group by 列名1; | 在表中按照列名1分组查询 |
having | select ...from 表名 group by 列名1 having 条件; | group by 查询之后使用条件过滤不能用where应该用having |
4.3联合查询
内连接 | select 字段 from 表1 别名1 [inner] join 表2 别名2 on 连接条件; | |
外连接 | select 字段 from 表1 别名1 [inner] left join 表2 别名2 on 连接条件; 左表全显示 select 字段 from 表1 别名1 [inner] join right 表2 别名2 on 连接条件; 右表全显示 | |
自连接 | ||
子查询 | 嵌套查询 | [not] in |
[not] exists | ||
合并查询 | union 取俩个查询结果的并集 去重 | |
union all 取俩个查询结果的并集 不去重 |