表关系
一对一:一张表的一条记录一定只能与另外一张表的一条记录进行对应,反之亦然
一对多:一张表(1)中有一条记录可以对应另外一张表(2)的多条记录,但是反过来另外一张表(2)的一条记录只能对应第一张表(1)的一条记录
多对多:一张A表中的一条记录,能够对应B表中的多条记录,同时B表中的一条记录也能对应A表中的多条记录
范式
范式是一种分层结构的规范,分为六层:
1)1NF、2NF、3NF、……6NF
2)1NF是最底层,要求最低
3)6NF是最高层,要求最严格
第一范式(1NF)
要求字段的数据具有原子性(也就是不可以再分,直接拿来用,而不是切割后用)
第二范式(2NF)
要解决表的设计不允许出现部分依赖
第三范式(3NF)
解决传递依赖的问题
逆规范化 磁盘利用率与效率的对抗
高级数据操作
新增数据
基本语法 insert into 表名【(字段列表)】 values(值列表)
主键冲突(Duplicate key)
当主键存在冲突的时候,可以选择性的进行处理,镜像更改和替换
更新操作 insert into 表名【(字段列表)】values(值列表)on duplicate key update 字段 = 新值
替换 replace insert into 表名【(字段列表)】 values(值列表)
表创建的高级操作
从已有表创建新表(复制表结构) create table 表名 like 数据库。表名
蠕虫复制
:先查出数据,让后将查询出的数据增一遍
insert into 表名【(字段列表)】 selert 字段列表/*from 数据表名
蠕虫复制的意义
从已有表拷贝数据到新表中
可以迅速地让表中的数据澎湃到一定的数据量,用来测试表的压力以及效率
更新数据
基本语法 update 表名set 字段 = 值【where条件】
高级语句 update 表名set 字段 = 值【where条件】【limit更新数量】
删除数据
deletefrom 表名 【where条件】【limit数量】
truncate 表名 先删除该表,后新增该表
查询数据
基本语句 select 字段列表/*from 表名 【where条件】
完整语法 select【选择】 字段列表【字段别名】/*from 数据源【where条件子句】【group by子句】【having子句】【order by 子句】【limit子句】
select 选项 :select 对查出来的结果的处理方式
all:默认值,保留所有结果
distinct : 去重,查出来的结果,将重复给去除
字段别名
字段名【as】别名
数据源:单表数据源 多表数据源 查询语句
单表数据源 select*from 表名
多表数据源 select*from 表名1 表名2
子查询 select*from(select语句)as别名
where子句 : 返回结果0 或1 ,0 代表false1代表true
判断条件
比较运算符 >,<, >=, <=, !=, <>, =,like, between, and , in/not in
逻辑运算符 &&(and) , ll(or) , !(not)
group by 子句
基本语法 group by 字段名 【asc|desc】
统计函数
count(): 统计分组后的记录数,每一组有多少记录
max(): 统计每组中最大值
min(): 统计每组中最小值
avg(): 统计平均数
sum(): 统计和
多字段排序
group_concat(字段)
回溯统计
with rollup
having子句
与where子句一样,是进行条件判断的
having能够使用字段别名
order by子句
基本语法 order by 字段名 【asc|desc】
limit子句
方案一 只用来限制长度,即数据量:limit数据量
方案二 限制起始位置,限制数量: limit起始位置,长度
limit offset length
length:每页显示数据量,基本不变
offset = (页码-1)*每页显示量