数据库的哪些事儿~~

  • 一  . 事务的四个特性?

四大特性是:ACID 原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)+介绍四个特性概念;

原子性:整个事务中的所有操作,要么全部完成,要么全部不完成,不可能停滞在中间某个环节。事务在执行过程中发生错误,会被回滚(Rollback)到事务开始前的状态就像这个事务从来没有执行过一样。

一致性:在事务开始之前和事务结束以后,数据库的完整性约束没有被破坏

隔离性:当两个或者多个事务并发访问(此处访问指查询和修改的操作)数据库的同一数据时所表现出的互相关系事务隔离分为不同的级别,包括读未提交(Read uncommitted)、读提交(Read committed)、可重复读(Repeatable read)和串行化(Serializable)。隔离状态执行事务,使它们好像是系统在给定时间内执行的唯一操作。如果有两个事务,运行在相同的时间内,执行 相同的功能,事务的隔离性将确保每一事务在系统中认为只有该事务在使用系统。这种属性有时称为串行化,为了防止事务操作间的混淆,必须串行化或序列化请求,使得在同一时间仅有一个请求用于同一数据。

持久性:在事务完成以后,该事务对数据库所作的更改便持久的保存在数据库之中,并不会被回滚。


   二 .  事务的隔离级别

读未提交(Read uncommitted)、读已提交(Read committed)、可重复读(Repeatable read)和串行化(Serializable)

  ① Serializable (串行化):可避免脏读、不可重复读、幻读的发生。

  SERIALIZABLE可以防止除更新丢失外所有的一致性问题,即:

    1.语句无法读取其它事务已修改但未提交的记录。

    2.在当前事务完成之前,其它事务不能修改目前事务已读取的记录。

    3.在当前事务完成之前,其它事务所插入的新记录,其索引键值不能在当前事务的任何语句所读取的索引键范围中。

  ② Repeatable read (可重复读):可避免脏读、不可重复读的发生。

  REPEATABLE READ事务不会产生脏读,并且在事务完成之前,任何其它事务都不能修改目前事务已读取的记录(这一点和串行化一样)。其它事务仍可以插入新记录,但必须符合当前事务的搜索条件——这意味着当前事务重新查询记录时,会产生幻读(Phantom Read)。

  ③ Read committed (读已提交):可避免脏读的发生。

    语句无法读取其它事务已修改但未提交的记录。(这一点 和串行化一样)

  ④ Read uncommitted (读未提交):最低级别,任何情况都无法保证


三. 四大冲突问题(脏不更换)

1、脏读(读错)

某个事务读取的数据是另一个事务正在处理的数据。而另一个事务可能会回滚,造成第一个事务读取的数据是错误的。

2、不可重复读(读旧)

在一个事务里两次读入数据,但另一个事务已经更改了第一个事务涉及到的数据,造成第一个事务读入旧数据

3、幻读

幻读是指当事务不是独立执行时发生的一种现象。例如第一个事务对一个表中的数据进行了修改,这种修改涉及到表中的全部数据行。同时,第二个事务也修改这个表中的数据,这种修改是向表中插入一行新数据。那么,以后就会发生操作第一个事务的用户发现表中还存在没有被修改的数据行,就好象发生了幻觉一样。

4、更新丢失

多个事务同时读取某一数据,一个事务成功处理好了数据,被另一个事务写回原值,造成第一个事务更新丢失


四。 乐观锁和悲观锁?使用场景?

乐观锁:默认读数据的时候不会修改,所以不会上锁;

悲观锁:默认读数据的时候会修改,所以会上锁;

乐观锁适用于多读少写的情况,省去锁的开销,加大系统的吞吐量

 

五。 MySQL引擎的区别?

mysql两种存储引擎:InnoDB和MyISAM
区别:(1.事务;2.锁;3.效率;4.查询/插入更新)

1).MyISAM是非事务安全型的,而InnoDB是事务安全型的。

2).MyISAM锁的粒度是表级,而InnoDB支持行级锁定

3).MyISAM相对简单,所以在效率上要优于InnoDB,小型应用可以考虑使用MyISAM。

4).MyISAM管理非事务表。它提供高速存储和检索,以及全文搜索能力。如果应用中需要执行大量的SELECT查询,那么MyISAM是更好的选择。

5).InnoDB用于事务处理应用程序,具有众多特性,包括ACID事务支持。如果应用中需要执行大量的INSERT或UPDATE操作,则应该使用InnoDB,这样可以提高多用户并发操作的性能。由于锁的粒度更小,写操作不会锁定全表,所以在并发较高时,使用Innodb引擎会提升效率。


。 数据库索引有哪些类型?

普通索引、唯一索引、主键索引、组合索引;

普通索引:没有任何限制;

唯一索引:索引列的值必须唯一,但允许有空值

主键索引:特殊的唯一索引,不允许有空值;一个表只能有一个主键;

组合索引:多个字段组合作为索引;

在聚集索引中,表中行的物理顺序与键值的逻辑(索引)顺序相同。一个表只能包含一个聚集索引。

补充聚集索引和非聚集索引的区别:

     聚集索引和非聚集索引的根本区别是表记录的排列顺序和与索引的排列顺序是否一致,聚集索引表记录的排列顺序与索引的排列顺序一致,优点是查询速度快,因为一旦具有第一个索引值的纪录被找到,具有连续索引值的记录也一定紧跟其后。聚集索引的缺点是对表进行修改速度较慢,这是为了保持表中的记录的物理顺序与索引的顺序一致,而把记录插入到数据页的相应位置,必须在数据页中进行数据重排,降低了执行速度。建议使用聚集索引的场合为:
  a.此列包含有限数目的不同值;
  b.查询的结果返回一个区间的值;
  c.查询的结果返回某值相同的大量结果集。

 七。 数据库索引原理?具体参考博文:https://blog.csdn.net/weixin_37766296/article/details/80461963

索引:数据库索引,是数据库管理系统中一个排序的数据结构,以协助快速查询、更新数据库表中数据。索引的实现通常使用B树及其变种B+树

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


八。B树和B+树原理?


为什么使用B树?
      二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下。采用多叉树结构减少树的深度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率。

动态查找树主要有:二叉查找树(Binary Search Tree),平衡二叉查找树(Balanced Binary Search Tree),红黑树(Red-Black Tree ),B-tree/B+-tree/ B*-tree (B~Tree)。前三者是典型的二叉查找树结构,其查找的时间复杂度O(log2N)与树的深度相关,那么降低树的深度自然会提高查找效率。

      但是咱们有面对这样一个实际问题:就是大规模数据存储中,实现索引查询这样一个实际背景下,树节点存储的元素数量是有限的(如果元素数量非常多的话,查找就退化成节点内部的线性查找了),这样导致二叉查找树结构由于树的深度过大而造成磁盘I/O读写过于频繁,进而导致查询效率低下(为什么会出现这种情况,待会在外部存储器-磁盘中有所解释),那么如何减少树的深度(当然是不能减少查询的数据量),一个基本的想法就是:采用多叉树结构(由于树节点元素数量是有限的,自然该节点的子树数量也就是有限的)。(解释为什么使用B树)

      也就是说,因为磁盘的操作费时费资源,如果过于频繁的多次查找势必效率低下。那么如何提高效率,即如何避免磁盘过于频繁的多次查找呢?根据磁盘查找存取的次数往往由树的高度所决定,所以,只要我们通过某种较好的树结构减少树的结构尽量减少树的高度,那么是不是便能有效减少磁盘查找存取的次数呢?那这种有效的树结构是一种怎样的树呢?

      这样我们就提出了一个新的查找树结构——多路查找树。根据平衡二叉树的启发,自然就想到平衡多路查找树结构,也就是这篇文章所要阐述的第一个主题B~tree即B树结构(后面,我们将看到,B树的各种操作能使B树保持较低的高度,从而达到有效避免磁盘过于频繁的查找存取操作,从而有效提高查找效率)。


九。什么是B+树?(??)

B+树是B树的变体,也是多路搜索树;B+树的特点是:

  1)非叶子结点的子树指针P[i],指向关键字值属于[K[i], K[i+1])的子树(B-树是开区间)

      2)所有关键字都在叶子结点出现;

  3)所有的非叶子节点相当于是叶子节点的索引;

  4)为所有叶子结点增加一个链指针;

B+的搜索与B树也基本相同,区别是B+树只有达到叶子结点才命中(B-树可以在非叶子结点命中),其性能也等价于在关键字全集做一次二分查找;

B+树和B+树的区别:

       1.所有关键字都出现在叶子结点的链表中(稠密索引),且链表中的关键字恰好是有序的;

       2.只会在叶子结点命中;

       3.非叶子结点相当于是叶子结点的索引(稀疏索引),叶子结点相当于是存储(关键字)数据的数据层;

 

B+树相比B树的优点: 

(1) B+树改进了B树, 让内结点只作索引使用, 去掉了其中指向data的指针, 使得每个结点中能够存放更多的key, 这样访问叶节点的数据的磁盘读写次数就更低;

(2) 由于底部的叶子结点是链表形式, 因此也可以实现更方便的顺序遍历, 而B树则需要对整个树的每一层遍历,需要更多的磁盘读写;


十。 为什么用数据库连接池?

1)资源重用。连接池里的连接可以重复使用,避免了频繁创建、释放连接引起的大量性能开销
2)更快的系统响应速度 。数据库连接池在初始化过程中,往往已经创建了若干数据库连接置于池中备用。此时连接的初始化工作均已完成。对于业务请求处理而言,直接利用现有可用连接,避免了数据库连接初始化和释放过程的时间开销,从而缩减了系统整体响应时间。
  • 数据库连接池配置/驱动参数?如何防止失效?

数据库连接池?
c3p0, druid;DBCP;
DBCP配置参数:
driverClassName:连接数据库所用的 JDBC Driver Class, 
password: 登陆数据库所用的密码 
url: 连接数据库的 URL 
username: 登陆数据库所用的帐号 
初始化连接数量initialSize:连接池启动时创建的初始化连接数量;
最大连接数maxActive:如果超过maxActive,后面的连接请求加入到等待队列中
最大空闲连接数maxIdle:连接池中允许保持空闲状态的最大连接数量,超过的空闲连接将被释放;
最小空闲连接数minIdle:连接池允许空闲的最小连接数量,小于则创建新的连接;
最大等待时间maxWait;当没有可用连接时,连接池等待连接被归还的最大时间,超过时间则抛出异常。

十一。 

数据库连接池如何防止失效?
(设置参数,操作对象/空闲的时候进行验证
testOnBorrow:取得对象时是否进行验证,检查对象是否有效,默认为false 
testOnReturn:返回对象时是否进行验证,检查对象是否有效,默认为false 
testWhileIdle:空闲时是否进行验证,检查对象是否有效,默认为false 
testOnReturn,testOnBorrow这两个参数为true时,表示会在每次请求之前和之后进行连接池测试,如果连接失效,就会将这条连接对象销毁,创建一个新的连接对象。

testWhileIdle参数。这个参数为true时候,表示空闲时是进行验证,检查对象是否有效。然后minEvictableIdleTimeMillis配合timeBetweenEvictionRunsMillis,每过timeBetweenEvictionRunsMillis秒对连接池进行一次检测,将对象闲置时间超过minEvictableIdleTimeMillis秒的对象进行销毁,创建新的对象来取代。这样就能保证时刻都有正常的连接池对象存在。

转载参考:https://www.cnblogs.com/buwenyuwu/p/7222626.html?utm_source=itdadao&utm_medium=referral

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/559067.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

众友科技计算机组成原理,组成原理:采用微程序控制器的模型机CPU设计(10页)-原创力文档...

课程设计报告课程名称: 计算机组成原理设计题目: 采用微程序控制器的模型机 CPU设计院 系:班 级:设 计 者:学 号:指导教师:目 录课程设计(大作业)报告 1昆明学院课程设计(大作业)任务书 错误&am…

JVM 运行时数据区域总结

引言 本博客总结自《深入理解 Java 虚拟机》,第二章。 一、概述 Java 虚拟机在执行 Java 程序的时候会把它所管理的内存划分为若干个不同的数据区域。 记忆口诀:两栈一计数,一堆一方法。 解释:第一句两栈分别是VM栈和本地方法栈…

一篇博客读懂设计模式之---单例模式

一篇博客读懂设计模式之---单例模式 一。 单例模式 单例对象(Singleton)是一种常用的设计模式。在Java应用中,单例对象能保证在一个JVM中,该对象只有一个实例存在。这样的模式有几个好处: 1、某些类创建比较频繁&…

计算机会计知识竞赛,全国企业会计信息化知识竞赛试题及答案

全国企业会计信息化知识竞赛试题及答案第 1 题(单选)下列各项中,符合会计软件不可逆的记账功能要求的是( A )A.记账标记不得通过任何操作予以取消B.不可以用红字凭证更正记账错误C.可以删除已经记账的记账凭证D.可以进行反记账第 2 题(单选)下列关于信息系统自动生成…

使用缓冲字节流:BufferedInputStream与BufferedOutputStream读写数据

功能逻辑:将一个视频文件通过缓冲字节输入流进行读取,然后再通过缓冲字节输出流将其重新拷贝输出。public static void main(String[] args) {try {FileInputStream fis new FileInputStream("Rick_and_Morty.mkv");//第二个参数指定了缓冲区…

多媒体计算机技术的主要特点,多媒体技术主要特点?

满意答案01and032013.11.24采纳率:41% 等级:11已帮助:5479人多媒体技术有以下几个主要特点:(1)集成性 能够对信息进行多通道统一获取、存储、组织与合成。(2)控制性 多媒体技术是以计算机为中心,综合处理和控制多媒…

java io流的学习总结~~

java io流的学习总结~~流的概念和作用流是一组有顺序的,有起点和终点的字节集合,是对数据传输的总称或抽象。即数据在两设备间的传输称为流,流的本质是数据传输,根据数据传输特性将流抽象为各种类,方便更直观的进行数据…

计算机组成原理第二章数据,计算机组成原理第二章数据在计算机中的表示

计算机组成原理第二章数据在计算机中的表示 (91页)本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦!14.90 积分第二章 数据在计算机中的表示 n 概述 n 字符编码 n 中文编码 n 逻辑数据 n 数值数据 n 校验…

linux 指令学习总结~~~

linux 指令学习总结~~~目录操作:mkdir $HOME/testFolder(创建一个目录) cd ./testFolder(cd $HOME/testFolder)(切换目录) cd ..(切换到上级目录) mv $HOME/testFolder /var/tmp/(移…

Java移位运算

博客理由:景区APP项目中涉及到分布式ID设计。分别有几种ID的设计方式:一种是数据库的自增,但是局限很大;第二种uuid,直接采用jdk自带的uuid生成即可;第三种是Twitter的Snowflake(雪花)ID生成技术&#xff0…

计算机的外部设备 硬盘,外部设备采用SMB协议想共享电脑硬盘下的文件

您好!很抱歉这么晚回复您,请您尝试以下的步骤:1、右键点击”此电脑“,选择“管理”,展开“本地用户和组”,右键点击“Guest”,设置密码为空密码;取消帐户已禁用,点选“用…

史上最全的ubuntu服务器搭建环境教程~~~

ubuntu服务器搭建环境~~~ 1. 先安装xshell:远程服务器连接(取代直接在浏览器 上 访问) 2. 安装xftp(ftp文件传输)直接双击红色圈圈即可3. 安装mysql数据库:指令:sudo apt-get updatesudo apt-ge…

Apache工具包方法——Hex.encodeHexString(byte[] data)源码浅析

【2019-07-02 注:标题是Hex.encodeHexString(byte[] data) 的源码解析,但在实际测试过程中,改了方法名称,内部实现还是完全一样的。】 最近正在研究加密的相关方法和思想,有时候会用到byte类型的数组密钥或者密文&…

Spring Boot————简介与Spring时代的承接

引言 最近,公司正在开发一个景区系统的项目,涉及到Spring Boot框架的使用,在此记录下Spring Boot框架应该知道的基础知识。 一、产生 SpringBoot是顺应现在微服务(MicroServices)理念而产生的一个微框架&#xff08…

计算机考试400,400作文:电脑考试

400作文:电脑考试今天下午第三节课是大家最爱的电脑课,第三节课的上课铃还没敲响,大家就早早来到电脑室门口,拍好整齐的队伍,等待电脑金老师来带领我们进电脑室。终于,金老师面带微笑从办公室走到了我们这边…

史上最容易理解的暴力递归和动态规划~~

史上最容易理解的暴力递归和动态规划~~介绍递归和动态规划暴力递归:1, 把问题转化为规模缩小了的同类问题的子问题2, 有明确的不需要继续进行递归的条件(base case)3, 有当得到了子问题的结果之后的决策过程 4, 不记录…

英雄联盟与人生奋斗的类比讨论

自从去年毕业之后就已经很少玩英雄联盟了,最近半年更是一次都没碰过这个游戏了。 更新还是异常的频繁,打斗还是异常的激烈,比赛还是异常的水(S系列中国队的表现)。 我今天并不是想追忆曾经的激情,而是想把…

如何最好手机硬件测试软件,手机硬件出现故障?简单几部教你自己动手检测! _手机资讯...

很多人在使用手机时,经常遇到例如屏幕触摸不准、距离感应器不反应、手机按键失灵等类似问题,有的情况是系统故障,但大多数是属于硬件故障,那如何判定呢?其实很多安卓手机自带的有硬件检测工具,下面就以小米…

String StringBuilder StringBuffer三者之间的区别~~~

String StringBuilder StringBuffer三者之间的区别~~~String是字符串常量,它是典型的immutable类,被声明final class,所有的属性都是final,由于它的不变性,类似拼接,剪裁字符串等操作,都会产生…

qq传输文件的软件测试点,超强新功能 QQ传文件夹测试版抢先试用

QQ传文件夹测试版试用(1)中关村在线软件事业部消息 腾讯体验中心今日(7月29日)发布了一个新的体验项目“QQ2009传文件夹测试版”。QQ的传文件功能,相信多数用户都使用过。在之前的版本中,很多用户反馈希望增加传文件夹的功能,方便多文件的传输…