前言:
当前看官们对“mysql的技术特点是什么”都比较看重,看官们都需要分析一些“mysql的技术特点是什么”的相关内容。那么小编也在网摘上汇集了一些对于“mysql的技术特点是什么””的相关资讯,希望小伙伴们能喜欢,小伙伴们快快来学习一下吧!各位朋友,今天我们来看看百度的面试题。这个问题是关于“买色购”中事物的特性以及对应的薪资和岗位。对应的薪资是30k,岗位是高级开发工程师。
在关于型数据库管理系统中,一个逻辑公众单元要成为事物,必须满足四个特性,即我们常说的“ACID”,包括原子性、一致性、隔离性和持久性。我们来看看如何更好地向面试官介绍这四大特性。
首先,我们在回答这个问题时,肯定要先解释每一个特性的基本概念。首先,我们来看原子性。原子性指的是事物作为一个整体被执行,作为一个整体被执行包括在其中的对数据库的操作要么全部被执行,要么是都不执行。简单来说,我们的事物中的操作要么都成功,要么都失败。
InnoDB纯种引擎提供了两种与事物相关的日志,包括redo log、重做日志和安度 log回滚日志。其实,原子性和隔离性都是以安度 log为实现基础的。redo log保证事物的持久性,每写一个事物都会修改八八炮并产生对应的锐度和安度。
如果我们要回滚操作,就要基于安度 log,实现回滚。原子性和原汁原味是关键。
好的,接下来我们看看一致性。一致性指的是事物应该确保数据库的状态从一致状态转变为另一个一致状态。一致状态的含义是数据库中的数据应满足完整整性的约束。例如,我的a账户和b账户都有500元,总额为1000元。
此时,a账户和b账户的资金总额总是1000元。
无论a账户向b账户转账多少钱,例如a账户直接将这五百元转给b账户,那么现在a账户的余额为零,而b账户的余额变为一千元。
然而,无论转账金额如何变动,实际上a账户和b账户的资金总额始终保持在一千元。这就是保证了资金状态的一致性,即从一个状态转移到另一个状态。这里的一致性还包括外部约束的一致性,即在创建表结构时指定的约束。
数据一致性是一个综合规定,由原子性、持久性和隔离性共同保证。
隔离性指的是一个事务的执行不应受到其他事务的干扰,即事务内部的操作和使用的数据应与其他并发事务隔离。简而言之,事务之间不应相互干扰,应相互隔离。但这是一种理想状态,完全隔离是不可能的。
因此,在数据库操作中,由于隔离性问题可能会导致各种问题。不考虑隔离性会导致哪些问题?这里可以进一步介绍,例如,回忆一个事务读取了另一个事务尚未提交的数据,这就是所谓的脏读。另一个问题是不可重复读,即一个事务多次读取同一行记录时结果不同。
另一个问题是幻读,即多次按照相同条件查询时结果不一致。例如,在统计时,最初的统计结果为500行,第二次为500行零,或者499行,这就是幻读的问题。
在数据库事务中,提供了四个隔离级别来解决这些问题。这些级别从高到低依次是at、on、pod和redo。这些级别足以解决脏读、不可重复读和换读等问题。
当然,如果同学们对这些方面理解得更深入,也可以进一步介绍如何解决这些问题,或者深入介绍如瑞卡姆斯如何实现这些问题。
最后是持久性。持久性指的是事务提交后,其对数据库中数据的更改应永久保存,后续的操作或故障不应影响其有效性。换句话说,数据一旦存储在磁盘上,就不应丢失。
在介绍原子性时,也提到了持久性是通过惰性和redo log实现的。redo log包括缓存中的redo log buffer和词典中的日志文件redo file。redo log是记录数据库中物理页变动情况的物理日志。当数据发生修改时,innodb不仅会更新数据,还会在redo log中记录操作。当进行事故提交时,会将操作记录存入硬盘中的redo log文件中。此时,事务已经提交成功,并会在数据文件同步时使用最新机制。
先存日志的机制被称为“wxhh”机制,同学们可以在面试中深入介绍一下。
最后总结一下,对st做个总结。事物的患病率是为了应对系统崩溃导致的数据丢失。只有保证事物的一致性,才能保证执行结果的正确性。
在非并发状态下,事物之间是天然隔离的,只需要保证事物的原子性,就能保证一致性。但在并发状态下,需要保证事物的原子性和隔离性。
通过以上方式回答面试官的问题,基本上可以让面试官满意。当然,如果对每个特性的实现有深入了解,也可以进一步详细回答。
以上是对这道面试题的解答,希望对同学们有所帮助。