MySQL中事务相关面试题(概念)

1.什么是事务?

事务是一个不可分割的工作单元,它确保一系列数据库操作要么全部执行,要么全部不执行。

2.事务的基本性质

1)原子性(最重要的特性)

概念:事务是一个原子操作,即它是一个不可分割的工作单位,事务的任何部分都不能分割。这意味着事务要么完全执行,要么完全不执行。

在以前科学界认为原子是最小单位,不可分割,故以此取名原子性。

2)一致性

概念:事务必须确保数据库从一个一致的状态转变到另一个一致的状态。即使在事务执行期间数据库发生错误,也能通过回滚(Rollback)机制撤销事务中的所有操作,从而保持数据库的一致性。

举个例子:转钱,分为两步。第一步:A账户扣500转给B账户。第二步:B账户接收加500.

这两步成为一个整体。不会出现A账户未扣而B账户增加A账户扣了而B账户未增加等情况。

如果出现则会发生回滚机制,以确保转账成功。

回滚机制:在转账这个闭区间中,如果发生错误,就会回到起点。即A开始转账位置。

3)持久性

概念:一旦事务提交,其对数据库中的数据改变就是永久性的,即使系统崩溃也不会丢失。

可以理解成直接对辅存(例如:硬板)中数据进行修改,电脑断电后数据不会丢失。

4)隔离性(有点抽象,但是重点!)

       由于一个服务器对应多个客户端,属于多线程,进而有脏读,不可重复读,幻读这三个问题

a)脏读

概念:脏读是数据库事务并发控制中的一个问题,它发生在一个事务读取了另一个事务未提交的数据时。具体来说,当一个事务正在对某个数据进行修改,并且这个修改还没有被提交到数据库中时,另一个事务读取了这个未提交的数据,那么这个读取操作就被称为脏读

解释:我的同桌是一个学霸,他正在写作业,我把他写好了的部分抄写了。过了一会,学霸感觉我抄的那块写自己错了,就修改了,我也不知道,交了作业发下来发现我的错了,学霸对了。

b)不可重复读

概念:在MySQL等关系型数据库中。它指的是在同一个事务内,多次读取同一行数据时,得到的结果可能不一致

解释:吸取上面的教训,在学霸写作业的过程中我不能看。(也就是写操作上锁了)在他写完后,我开始看,但在我看的过程中,学霸发现了一个错误,进行修改了,使我上一秒看到的与现在看到不一样的结果。

c)幻读

概念:在一个事务中,由于其他事务插入或删除了满足某个条件的数据,导致当前事务查询到了新插入或删除的数据,从而出现了“幻觉”。

解释:首先,幻读是不可重复读一种特殊情况。紧接上文,为了我能一次性抄到正确答案,于是我与学霸约定好在他写的过程中我不能看,在我看的时候他不能修改。(也就是 写与读 都上锁了)但是学霸看到答案少了一些步骤,于是写在一张纸对答案进行补充,于是在我抄到过程中又多了新的内容。

      在MySQL中隔离性又分为读未提交、读已提交、可重复读和串行化(用来解决上述三个问题)。 

a)读未提交 (未解决问题)

  • 最低的隔离级别。
  • 允许一个事务读取另一个事务尚未提交的数据。
  • 可能导致脏读,即读取到未提交的数据。
  • 由于可能读取到未确定的数据,因此一般不推荐使用。

b)读已提交(解决了脏读)

  • 一个事务只能读取到已经提交的事务所做的修改。
  • 解决了脏读问题,但可能出现不可重复读和幻读。
  • 在很多数据库系统中,这是默认的隔离级别。

c)可重复读(解决了脏读,不可重复读)

  • MySQL的默认隔离级别。
  • 保证在同一个事务中多次读取同样记录的结果是一致的。
  • 解决了脏读和不可重复读问题,但可能出现幻读。
  • 通过多版本并发控制(MVCC)实现。

d)串行化(解决了脏读,不可重复读,幻读)

  • 最高的隔离级别。
  • 强制事务串行执行,避免了脏读、不可重复读和幻读。
  • 但由于事务只能顺序执行,大大降低了系统的并发性能。(速度最慢!)

总结:从a->d,运行速度越来越慢,但数据越来越准,并不一定都选择串行化就好,例如短视频的点赞就不用那么准;在计算有关钱的方面这需要准。所以要按需进行选择。

(在计算机这边,学习多了,你会发现没有绝对的好,也没有绝对的坏,它的存在一定有它存在的道理。在生活中也很相似,你认为好的并不一定是我认为好的。在选择的过程中必然有所得,也有所失!)

上述只是简单描述了一下事务,还有很多不足之处,详细的还请敬请期待!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

茜子.Java

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值