嘟嘟嘟,面试官的电话打过来了:你好XXX,我看你在简历上写上了熟练使用Mysql数据库,年轻人你要知道“熟练”
这两个字可不是随便用的,既然你说了那我就考考你啊。
此时的我慌的一批,尼玛写简历也没啥经验,我要是知道你会扣简历上的字和词语,我绝对会是像对待女朋友那样对待简历(emmm,哎请容许我用夸张的手法形容一下,谁叫我没有女朋友…)
那你说说吧,什么是数据库的事务?

事务(Transaction):访问并可能更新数据库中各种数据项的一个程序执行单元(unit),他通常是由程序的执行产生的。当数据库中更改数据成功时,在事务中更改的数据就会提交,不在改变,否则事务就会取消或者回滚,此时的更改就无效。
那你知道事务的四大特性吗?
尼玛,你这问题问的,学了数据库的谁不知道,但是我只记得四个特性的名字,要是让我解释四个特性,我Tm真的不会啊,不是不会,是真的忘了啊。
尊敬的面试官您好,事务的特性我知道的。
- **原子性(Atomicity):**原子性是指事务包含的所有操作要么全部成功,要么全部失败回滚,这样设计可以使得当事务的操作失败后执行过的流程不会对数据库造成任何影响。
- **一致性(Consistency):**一致性是指事务必须使数据库从一个一致性状态转变为另一个一致性状态,也就是说执行前和执行后都必须处于一致性状态。
打个比方:假设用户A和用户B两者的钱加起来一共是5000,那么不管A和B之间如何转账,转几次账,事务结束后两个用户的钱相加起来应该还得是5000,这就是事务的一致性。 - **隔离性(Isolation):**隔离性是指多个用户并发访问数据库的时候,比如操作同一张表的时候,数据库为每个用户开区的事务不能被其他事务的操作所干扰,多个并发任务之间需要相互隔离。
- 持久性(Durability): 持久性是指一个事务一旦被提交了,那么对于数据库的改变就是永久的,即使在数据库系统遇到故障的时候也不会丢失提交事务的操作。
打个比方,你买东西的时候需要记录在账本上,即使老板忘记了那也有据可查
嗯,还行,你小子差不对都能答上来,那我再问问你数据库事务个特性是通过什么实现的?
尼玛,问问四个特性就行了,还要问是怎么实现的?丢,好慌,挠挠头,咋办啊,突然想到了老师上课在PPT上提过!!!
而事务的ACID是通过InnoDB(InnoDB是mysql的一个存储引擎)的日志和锁来保证。事务的隔离性是通过数据库锁的机制实现的,持久性通过redo log(重做日志)来实现,原子性和一致性通过Undo log(回撤日志)来实现。
你小子有点东西啊,ok,那我再问你数据库索引是用什么数据结构实现的,为什么不用其他的?
我丢,啥玩意???数据库的索引?还数据结构?此时的我着实有点慌啊!!!定睛一想,慌个锤子,知道啥就说啥!
数据库索引的实现我记得使用的是B+树,但是为什么不用其他得数据结构这个我还真的不知道啊!
是的,是使用B+树实现的,之所以使用B+树是因为因为B+树的节点中包含的值个数(多个值)比二叉树(1个值)更多,所以在B+树中查询所需要的节点数就更少,,数据库索引使用节点大小恰好等于操作系统一页大小的B+树来实现是效率最高的选择。

喔霍,这个我是真的没有了解过,但是仔细一想平衡二叉树和二叉排序树,还有B树的一些相关的东西,好像是这么回事啊。
1957

被折叠的 条评论
为什么被折叠?



