简介:慕课网《Google面试官亲授 升级Java面试》视频课程 数据库知识整理笔记
数据库概述
关系型数据库
基于关系代数理论
缺点:表结构不直观,实现复杂,速度慢
优点:健壮性高,社区庞大
JOIN & GROUP BY
JOIN
用法:
table1 join table2 (笛卡尔积)
on table1.字段=table2.字段 (条件选择)
功能:
把来自两个或多个表的行结合起来
外连接
left join(左外连接):结果集包含左表的所有行
right join(右外连接):结果集包含右表的所有行
full join (完整外连接):结果集包含左表和右表中的所有行
(null 字段 会显示)
内连接
join(内连接) :共有的列的值匹配两个表中的行
(null 字段 不会显示)
交叉连接
不带on字句
on 条件:过滤两个连接表笛卡尔积形成中间表
where条件:提取那些满足指定标准的记录
GROUP BY
用法:
GROUP BY 字段:结合聚合函数 根据字段值分组(根据字段分组)
功能:
结合聚合函数,根据一个或多个列对结果集进行分组。
聚合函数
count、sum、max、min、avg…
select 后 + count(*)、min(字段) 新增属性
子查询(嵌套SELECT语句)
可以在SELECT,INSERT,UPDATE使用,返回将被用于在主查询作为条件的数据,以进一步限制要检索的数据
事物和乐观锁
事物的特性
ACID:
Atomicity
事物要么不做 要么做完
Consistency 约束
事物满足的约束
Isolation
不同事物之间的独立性
Durability
事物结果的持续性
事物的隔离级别
Read uncommitted
未committed时 数据就可读取更新值
Read Committed
只有committed 之后 数据才会更新
Reapeatable Reads
在transaction 事物开始阶段读到的值为准 不管别的事物是否改变这个值
Serializable
其他事物进行数据update时 其他事物无法进行update
一般情况下,隔离级别不需要那么高 。 比如在Read Committed下 ,读上加锁:select 后加 for update 加锁 (悲观锁)
缺点:系统开销大,浪费资源,由此引入乐观锁。
乐观锁
不加transaction保护,而是加版本保护
update ‘表名’ set ‘属性名’=? where 条件=? and ‘属性名’=?(版本保护)
乐观锁演示
- 读取数据 ,记录Timestamp(某个属性值)
- 修改数据
- 检查和提交数据
适用冲突不多的情况(因为数据库读取比较慢)
数据库的常见问题
介绍关系数据库的理论基础
关系代数 :1-5 范式
给定场景,设计表结构
2范式:有主键
3范式:不能有传递依赖 (非主键字段之间不能有传递依赖)
给定表结构,按要求写SQL语句
参考前面sql语句
事物的ACID属性?哪些隔离级别?
事物性能太慢怎么办?
考虑使用乐观锁