数据保存
保存在内存
优点-读写速度快
缺点-程序结束后数据丢失
保存到文件(序列化)
优点-数据可以永久保存
缺点-频繁的进行io操作,效率不高
数据的管理不方便,需要把所有数据全部读取出来才能操作
数据库
1-永久保存
2-管理方便
数据库实例-schema
物理主键(数据库中的唯一标识)--id -pk/nn/ai
逻辑主键(Java代码中的唯一标识)
创建表中的单词:
comments-注释
engine-引擎
pk(primary key)主键/主码(唯一标识)
nn(not null)非空
uq(unique)唯一
ai(auto increment)自动递增
un(unsigned)
default默认值
数据类
SQL语法
常用操作数据库的命令
1.show databases; 查看所有的数据库
2.create database test; 创建一个叫test的数据库
3.drop database test;删除一个叫test的数据库
4.use test;选中库 ,在建表之前必须要选择数据库
5.show tables; 在选中的数据库之中查看所有的表
6.create table 表名 (字段1 类型, 字段2 类型);
7.desc 表名;查看所在的表的字段
8.drop table 表名; 删除表
9.show create database 库名;查看创建库的详细信息
10.show create table 表名; 查看创建表的详细信息
11.insert into表名[(字段1,字段2,…)]valuse(‘值1’,‘值2’,…)往表里添加插入数据
DML-添加+删除+修改(关键字)
insert---添加
insert into 表名() values(值1,值2,…);
insert into 表名(字段1,字段2…) values(值1,值2,…);(较常用)
insert into 表名(字段1,字段2…) values(值1,值2,…),(值1,值2,…),(值1,值2,…);
delete----删除
delete from 表名 where 条件
注意:where 条件必须加,否则数据会被全部删除
与truncate区别:自增id重新初始化
update---修改
update 表名 set字段1 = 值1, 字段2 = 值2 where 条件
查询---关键字select
基本用法:
select 字段1,字段2......from 表名
dual 伪表
查询全部内容:
Select * from user;
查询内容带有筛选条件:
select * from user where **
查询部分列(起别名)
select a.id,a.name from user a where **
多表关联查询
select a.id,b.order from user a,order b where a.id=b.uid;
别名as
自定义列(常量列)
去掉重复数据 distinct
where 查询条件
比较
判空(null/空的字符串)-----Java(String)![](https://img-blog.csdnimg.cn/a561c7edd1544dc9a28b3ed768719082.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDEz44CB5Y-v5LmQ,size_20,color_FFFFFF,t_70,g_se,x_16)
模糊查询 like
转义
排序 order
默认升序---asc
降序---desc
聚合函数
求和:sun()
最大值:max()
最小值:min()
平均值:avg()
统计个数:count()(不包含null的个数)
分组筛选
分组:group by
having查询group by后的语句
limit分页查询
多表查询
数据库设计---ER图
一对一
一对多:在一表中加上多表中对应的唯一标识
多对多
子查询(嵌套查询)---3种方法
1、子查询的结果:作为主查询的条件来用(结果只能是一列)![](https://img-blog.csdnimg.cn/b25ae3d849284f8b8eb320d628de2a11.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDEz44CB5Y-v5LmQ,size_20,color_FFFFFF,t_70,g_se,x_16)
子查询结果只有一个用=或in,多个只能用in
2、子查询:作为主查询表来用(必须定义别名p2)
3、子查询:作为主查询的字段(子查询的结果必须是一条记录----所以用唯一标识作为连接字段)
关键字all、any
any----只要有一个记录满足条件,整个条件成立
<all-----对所有记录满足条件,整个条件成立
exists关键字
无关系
有关系
把有人的部门的信息查询出来
jon---关联查询
join-mysql常用的 7 种 join.pdfnull
思路
内连接 [inner] join---左右两表有关联能的数据才能查的出来![](https://img-blog.csdnimg.cn/b76997cb112846669aeb90b6ffd600fe.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDEz44CB5Y-v5LmQ,size_20,color_FFFFFF,t_70,g_se,x_16)
左(外)连接left [outer] join---左表中都能查到,右表中关联成功的能查到
右(外)连接right [outer] join ---右表中都能查到,左表中关联成功的能查到
全外连接 full [outer] join
MySQL中用union关键字
交叉连接 cross join
和全连接一回事
全连接--笛卡尔积
![](https://img-blog.csdnimg.cn/c59385d94fd54778a44d03b02f18d3cb.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDEz44CB5Y-v5LmQ,size_20,color_FFFFFF,t_70,g_se,x_16)
查询格式![](https://img-blog.csdnimg.cn/b0ad16a962a74cf5b554cf58cb7fc5f9.png?x-oss-process=image/watermark,type_d3F5LXplbmhlaQ,shadow_50,text_Q1NETiBANDEz44CB5Y-v5LmQ,size_20,color_FFFFFF,t_70,g_se,x_16)
时间
事务 transection
什么事事务:---要么都成功,要么都失败
eg:银行转账系统
事务原则(ACID)
--原子性:事务是不可分割的最小操作单位,要么都成功,要么都失败
--一致性:事务操作前后数据总量保持不变
--持久性:事务一旦提交则不可逆,数据会持久化到数据库里
--隔离性:多个事务之间互相独立,隔离性要求事务不受其他并发事务的影响,在给定时间内,该事务是数据库运行的唯一事务。