面试基础知识 数据库

数据库事务和事务隔离

事务是指作为单个逻辑工作单元执行的一系列操作,可以被看作一个单元的一系列SQL语句的集合。要么完全地执行,要么完全地不执行。如果不对数据库进行并发控制,可能会产生 脏读、非重复读、幻像读、丢失修改的异常情况。
同一时间,只允许一个事务请求同一数据,不同的事务之间彼此没有任何干扰。比如A正在从一张银行卡中取钱,在A取钱的过程结束前,B不能向这张卡转账。

数据库事物的一致性(即基本特征ACID)

1)原子性(Atomicity)
原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,因此事务的操作如果成功就必须要完全应用到数据库,如果操作失败则不能对数据库有任何影响。
2)一致性(Consistency)
一致性是指事务必须使数据库从一个一致性状态变换到另一个一致性状态,也就是说一个事务执行之前和执行之后都必须处于一致性状态。
拿转账来说,假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。
3)隔离性(Isolation)
隔离性是当多个用户并发访问数据库时,比如操作同一张表时,数据库为每一个用户开启的事务,不能被其他事务的操作所干扰,多个并发事务之间要相互隔离。
4)持久性(Durability)
持久性是指一个事务一旦被提交了,那么对数据库中的数据的改变就是永久性的,即便是在数据库系统遇到故障的情况下也不会丢失提交事务的操作。

数据库的三大范式

  1. 属性不可分:要求数据库表的每一列都是不可分割的原子数据项。
  2. 确保数据库表中的每一列都和主键相关,而不能只与主键的某一部分相关
  3. 确保数据表中的每一列数据都和主键直接相关,而不能间接相关。

索引

在数据之外,数据库系统还维护着满足特定查找算法的数据结构,这些数据结构以某种方式指向数据,这样就可以在这些数据结构的基础上实现高级查找算法,这种数据结构就是索引

索引一般分为B+树索引hash索引
B+树索引:在B-tree上改进得到,其非叶子结点均为key值,叶子结点是key-value键值对,叶子结点前后相连并且有序
hash索引:通过对ket进行hash而将记录储存在不同的bucket中,可以做到常数时间的查找

为什么有了B+树还需要hash索引?
1)B+树默认有序,hash默认无序,所以hash索引无法用来排序
2)hash索引在搜索速度O(1)要快于B+树索引O(logn)
3)hash只能进行等值查询(因为需要计算hash(key)再去匹配),而B+树索引可以进行等值、部分前缀、范围查询
添加索引的原则:
1)在查询中很少使用的列不应该创建索引
2)只有很少数据值的列也不应该创建索引
3)定义为text、image和bit数据类型不应该添加索引,因为这些类型要么相当大,要么数据少
4)当需要的修改性能远远大于检索性能时,不应该创建索引
索引的优点:
1)可以大大加快数据检索的速度
2)通过创建唯一索引,可以保证数据库表中每一行数据的唯一性
3)使用分组和排序检索时,可以显著减少分组和排序的时间
索引的缺点:
1)创建索引和维护索引需要好费时间
2)索引需要占额外的物理空间
3)当对表中的数据进行增删改的时候,索引也需要动态维护,这样就降低了数据库的维护速度

外连接和内连接

内连接:只返回两个表中联结字段相等的行,即两个表的交集
外连接:返回相等的行和不等的行。包括左外连接、右外连接和全外连接。
左外连接:左边表数据行全部保留,右边表保留相匹配的行。
右外连接:右边表数据行全部保留,左边表保留匹配的行。
全外连接:左外连接的结果 和 右外连接连接 做并集。

数据库四种连接状态

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值