数据库基础笔记

简介:慕课网《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属性?哪些隔离级别?

  • 事物性能太慢怎么办?

    考虑使用乐观锁

-------------本文结束感谢您的阅读-------------
坚持原创技术分享,您的支持将鼓励我继续创作!