创建数据库
create database 数据库;
删除数据库
drop database 数据库;
选择数据库
use 数据库;
创建数据表
create table 表 (字段1,字段2......);
删除数据库
drop table 表;
插入数据
insert into 表(字段名1,字段名2........)
values 字段值;
查询数据
select 字段1,字段2...... //*表示返回所有
from 表
where 条件;
更新数据
updata 表 set 赋值语句
where 条件;
删除记录
delete from 表
where 条件;
like
like表示包含
select 字段1,字段2......
from 表
where 字段 like 具体的内容;
union
union表示合并
select 字段1,字段2...
from 表1
where 条件1;
union;
select 字段1,字段2...
from 表2
where 条件2;
union去除重复值,union all不去除重复值,select中的字段必须相同
排序
select 字段1,字段2......
from 表
order by 字段x asc或desc
asc升序,desc降序
分组
select 字段1,字段2......
from 表
where 条件
group by 字段x;
可以按照字段x分组并统计每个组有多少条记录
连接
inner join内连接:获取两个表中字段匹配的记录
select a.字段1,a.字段2......,b.字段1,b.字段2......
from 表1 a inner join 表2 b
on 条件;
left join左连接:获取左表所有记录,获取右表中字段匹配的记录,空白显示null
select a.字段1,a.字段2......,b.字段1,b.字段2......
from 表1 a left join 表2 b
on 条件;
right join右连接:获取右表所有记录,获取左表中字段匹配的记录,空白显示null
select a.字段1,a.字段2......,b.字段1,b.字段2......
from 表1 a right join 表2 b
on 条件;
事务
用途
用于处理数据量大、复杂度高的数据。
需要的引擎
Innodb
事务的四个特性
原子性:事务中的操作,要么全部完成,要么全部不完成,不会停留在中间某个环节
一致性:事务开始之前和结束之后,数据库的完整性没有被破坏。写入的资料必须完全符合所有的预设规则
隔离性:数据库允许多个并发事务同时对其数据进行读写和修改,隔离性可以防止多个事务并发执行时由于交叉执行导致的数据不一致
持久性:事务处理结束以后,对数据的修改是永久的,系统故障也不会丢失
事务的隔离级别
读未提交:能读到没有被提交的数据,不能防止
读提交:只能读到已经被提交的数据,防止脏读
可重复读:读取了一条数据,这个事务不结束,别的事务就不可以改这条记录,防止不可重复读
串行化:运行完一个事务的所有子事务之后才可以执行下一个事务,防止幻读
不是隔离级别越高越好,级别越高效率越低,mysql默认是可重复读
事务的并发问题
脏读:事务A读到了事务B还没有提交的数据
不可重复读:在一个事务里面读取了两次某个数据,读出来的数据不一致
幻读:在一个事务里面的操作中发现了未被操作的数据
什么场景要用到事务
用于处理数据量大,复杂度高的数据
提交是什么意思
事务已经成功执行,并且写入数据库
什么场景下要用到串行化
非常需要确保数据一致性且不要求高并发,因为效率低
什么是索引
排好序的快速查找数据结构。
索引的用途
索引用来快速寻找那些具有特定值的记录。
索引会影响where后面的查找,和order by 后面的排序
索引的缺点
更新表的时候速度慢,因为不仅要保存数据,还要保存索引文件。索引文件会占用磁盘空间。
索引的原理
就是把无序的数据变成有序的查询
1.把创建了索引的列的内容进行排序
2.对排序结果生成倒排表
3.在倒排表内容上拼上数据地址链
4.在查询的时候,先拿到倒排表内容,再取出数据地址链,从而拿到具体数据
数据结构是b+树
聚集索引和非聚集索引
都是b+树的数据结构
聚集索引:把索引和数据放在一起,并且是按照一定的顺序组织起来的,找到了索引也就找到了数据,数据的物理存放顺序和索引顺序是一致的
优点:
只需要一次查询,效率比较高
对于范围查询效率高,因为数据是按照大小排列的
适合用在排序的场合,因为数据是按照大小排列的
非聚集索引:将索引和数据行地址放在一起,找到索引之后根据数据行地址到磁盘查找数据
数据库索引类型
单列索引:普通索引:单个列,唯一索引:索引的列的值是唯一的,可以有空值,主键索引:索引的列的值是唯一的,不允许有空值
组合索引:多个列
全文索引:字段中是否包含指定的关键字,原理是将字段进行分词
主键索引和唯一索引
相同:索引的列的值是唯一的
不同:主键索引不可以有空值,唯一索引可以有空值
数据库索引类型
单列索引:普通索引:单个列,唯一索引:索引的列的值是唯一的,可以有空值,主键索引:索引的列的值是唯一的,不允许有空值
组合索引:多个列
全文索引:字段中是否包含指定的关键字,原理是将字段进行分词
主键索引和唯一索引
相同:索引的列的值是唯一的
不同:主键索引不可以有空值,唯一索引可以有空值
慢查询优化
将字段很多的表分解成多个表
分解关联查询
忘了写主键索引,但是已经有几万条数据,要怎么优化
导出表,清空表,建立索引,导入数据
java如何使用数据库,和数据库建立连接
jdbc,配置一些参数
缓存的作用
缓和较慢存储的高频请求,缓解数据库压力,提高响应速度
为什么可以提高响应速度
因为缓存是基于内存的,内存的读写速度比磁盘快得多
缓存的应用场景
cpu缓存:位于cpu和内存之间的临时存储器,容量比内存小,速度比内存快得多
浏览器缓存:缓存一些静态资源,比如图片,js,css
cdn缓存:客户端先检查浏览器的缓存,缓存过期则会向cdn送请求,cdn检查缓存数据没有过期,那么直接返回响应,如果已经过期,需要向web server发起请求,获得新的数据响应
数据库缓存:cache层,数据缓存在内存中,读写速度比磁盘快得多
如何读写缓存
判断是否有缓存数据,没有数据的话从数据库加载,如果查出数据不为null,则写入缓存,在把数据调回使用方
缓存的数据如何与数据库中的数据保持一致
先删除缓存,再更新数据库:不常用
先更新数据库,再删除缓存:常用
范式
1NF列不可分
2NF完全依赖
3NF消除传递依赖
BCNF
酸碱性
酸性ACID
原子性,一致性,隔离性,持久性
碱性BASE
基本可用性,软状态,最终一致性