Java 程序员面试笔记 - 数据库

12.1 SQL

DML:插入数据、修改数据和删除数据。

DDL:数据定义语句,可以对数据库用户、基本表、视图等进行定义和撤销。

DCL:用于对数据库进行统一的控制管理。

12.2 内连接与外连接

内链接:两个表匹配的数据才出现在结果集。

外连接:左外链接、右外连接、全外连接。

12.3 事务

1. 原子性:全部执行或全部不执行。

2. 一致性:一个事物执行之前和之后数据库数据必须保持一致性状态。

3. 隔离性:不提交读 / 提交读 / 可重复读 / 串行化。

4. 持久性:事务完成后更改是永久性的。

12.4 存储过程

SQL 语句执行时要先编译再被执行,在大型数据库中为了提高效率将为了完成特定功能的SQL语句集进行编译优化后,存储在服务器中以便调用。

12.5 范式

1NF:数据库每一列都是不可分割的基本数据项。同一列中不能有多个值。

2NF:每个实例或行必须可以被唯一的区分。每一个非主属性都依赖某个候选键。

3NF:在 2NF的基础上,每个非主属性都不传递依赖候选键。BCNF:每个属性都不传递依赖 R 的候选键。

4NF:只存在一组多值依赖。

  1. 第一范式(1NF)

    • 要求数据库表的每一列都是不可分割的基本数据项,即表中的所有字段都应该只包含原子性的值。
    • 举例:如果有一个“地址”字段,它应该被拆分为“街道”、“城市”、“州”和“邮编”等单独的列。
  2. 第二范式(2NF)

    • 在满足1NF的基础上,要求表中没有部分依赖,即非主键列完全依赖于主键。
    • 举例:如果有一个订单表,其中包括了订单ID、客户ID和客户地址,如果客户地址只依赖于客户ID而不是订单ID,那么这个表就违反了2NF。
  3. 第三范式(3NF)

    • 在满足2NF的基础上,要求表中没有传递依赖,即非主键列只依赖于主键,不依赖于其他非主键列。
    • 举例:如果员工表中有一个部门名称字段,而部门名称依赖于部门ID(非主键),则违反了3NF,应该将部门信息分离到另一个表中。
  4. 鲍伊-科德范式(BCNF)

    • 在满足3NF的基础上,要求表中的每一行只表示一个唯一的信息,即任何非主属性都不能与主键的一部分有依赖关系。
    • 举例:如果一个学生课程表中包含学生ID、课程ID和课程名称,如果课程名称依赖于课程ID而不是学生ID,那么它应该被分离到另一个表中。
  5. 第四范式(4NF)

    • 要求表中不存在多值依赖,即一个表中不应该有两个或多个独立的多值事实关于同一个主键。
    • 举例:如果一个员工表中包含员工的工作历史记录,那么每个员工可能有多个工作记录,这违反了4NF,应该将工作历史记录分离到另一个表中。
  6. 第五范式(5NF)

    • 也称为项目连接范式(PJNF),要求消除表中的所有联接依赖。
    • 举例:如果有两个表通过多个字段进行联接,而这些字段本身并不构成主键,那么可能需要进一步规范化。

12.11 三级封锁

一级封锁:事务T在修改数据前需要加 X 锁,事务结束才释放。读取不加锁,会造成不可重复读和读脏数据。

二级封锁:一级基础上,读取数据加 S 锁,读完后释放 S 锁,可防止读脏数据,不保证可重复读。

三级封锁:一级基础上,读取 R 之前加 S 锁直到事务结束才释放。可保证可重复读。

12.11  补充 聚集索引和非聚集索引

聚集索引:对磁盘上实际数据重新组织按指定的一个或多个列的值排序的一种索引,每个表只能创建一个。记录的排列顺序和索引的排列顺序一致,查询速度快。B+ tree,叶节点就是数据节点。

非聚集索引:制定了表中记录的逻辑顺序。叶节点仍是索引节点,指针指向数据块。

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值