索引和事务

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


前言

提示:这里可以添加本文要记录的大概内容:
面试常考题:


提示:以下是本篇文章正文内容,下面案例可供参考
谈谈arraylist和linklist区别
1.arraylist底层是顺序表,linklist底层是链表
2.arratlist具备随机访问的能力(根据下标)

一、谈谈如何理解索引:

1.索引是干啥的,解决啥问题
索引类似于目录,(书架,书籍,目录)索引存在的主要意义,是为了提高查询的效率。快速定位,检索数据,提高了数据库的性能。
2.索引付出的代价:
降低了增加,删除,修改的效率(插入的新的记录,既要插入数据,还要调整索引)
3.索引背后的数据结构:
b+树
先认识b树
b树是一个n×搜索树
在这里插入图片描述

每个结点肯会包含n-1个值,当然也可以更少,n-1个值就把区间化成了n份
这样分成n个×的意义就是表示同样元素的数据集合的时候,比二叉树的高度要小很多,io次数也就降低了不少

b+树
在这里插入图片描述
1.2个值,俩个区间,每个结点值重复出现

二、谈谈如何理解事务

1.事务是干啥的(原子性)
要么全部都执行,要么一个都不执行,事务就是用来保证原子性的
事务能保证执行过程中出现问题的时候,自动的吧前面的sql执行的效果进行缓缓,恢复如初—回滚

原子性事务根本所在,能够把sql打包成一个整体,要么都执行,要么一个都不执行(执行出错自动欧诺个回收)

2.其他特性:
一致性:事务执行前后,数据出在一致的状态(数据能对的上,合情合理)
持久性:事务进行的改动,都是写到硬盘里的,不会随着程序重启/主机重启而丢失
隔离性:并发执行的时候,事务之间能够保持隔离,不相互打扰(并发执性简单理解为同时做很多事情)
隔离性存在的意义,就是让并发执行的过程中,尽量不出问题,问题再可控的范围内

3.并发执行事务下会出现那些问题,和一些解决方案

  • 脏读:

一个事务a在修改数据,提交之前,另一个事务b读取了数据,此时a极可能在提交的时候提交的是不同数据(后续又修改了)
解决方案:
写操作加锁:在提交之前,不能读,提交之后才能读(写完了才能读

  • 不可重复读
    在一个事务a中,多次读取同一个数据,发现不一样(读的过程被修改了
    解决方案:
    读加锁写完了才能读
  • 幻读:
    在读文件a的时候,修改/新增删除文件b,这样两次读虽然数据一样,但是结果集变了(串行化
    4.mysql隔离级别有哪些和上面的应对方案:
  • read uncommitted 允许读未提交的数据 并发max 隔离min 可能存在脏度/不可重复读/幻读
  • read committed 只能读提交之后的数据 写加锁 解决了脏度
  • repeatable read(默认)读和写都加锁 解决了脏度/不可重复读
  • serializable 严格执行串行化,并发min,隔离max ,都解决,效率最低

jdbc

api应用程序编程接口
提供了一组类/方法,让程序直接调用
各种数据库,都会提供api方便编程语言来控制

java统一api 取名jdbc

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值