【MySQL】事务的四大特性及如何实现(超详细,面试必考)

目录

原子性(Atomicity)

如何保证原子性,是如何实现的?

一致性(Consistency)

如何保证一致性,是如何实现的?

隔离性(Isolation)

如何保证隔离性性,是如何实现的?

持久性(Durability)

如何保证持久性,是如何实现的?


MySQL事务的四大特性——ACID

指的是原子性、一致性、隔离性、持久性

原子性(Atomicity)

        原子性指的是事务的操作被视为一个整体,不可分割。要么全部完成,要么全都回滚,不会出现部分执行的情况

        举银行转账的例子来说就是,一个事务T,从账户A中扣除100元将金额转给账户B,在这个过程中就是事务的两个步骤都要成功执行,才能够实现预期的操作;如果有任意一个步骤失败,整个事务都将回滚。

如何保证原子性,是如何实现的?

        在事务执行过程中,如果发生任何错误或中断,数据库会利用事务日志(undo log)记录需要回滚的操作,以确保事务的一致性。当回滚操作发生时,已经执行的 SQL 语句会被撤销,从而撤销已执行的更改。

一致性(Consistency)

        一致性是指事务在执行前后数据库的状态保持一致。

        在银行转账的中,一致性就要求转账前后的两个账户总额不变,比如转账前两个账户总额为2000元,转账之后总额肯定还是2000元,以确保数据的一致性

如何保证一致性,是如何实现的?

        一致性是事务的目标之一,通过其他三个 A、I、D 特性共同作用来保证。事务在开始和结束时应该保持数据库的一致状态。如果事务成功提交,则数据库将处于一致的状态;如果事务失败并回滚,则数据将恢复到事务前的一致状态。

隔离性(Isolation)

        隔离性是指多个事务并发执行时,每个事务都应该感觉不到其他事务的存在,并且互不干扰

        在银行转账的例子中,隔离性事务T要求在执行过程中不接受其他并发事务的影响。例如同时有一个事务T2也在修改A的账户或B的账户的余额,那么此时事务T应该能独立的完成转账操作而不受其他事务的影响。

如何保证隔离性性,是如何实现的?

        MySQL 使用多版本并发控制(MVCC)机制来实现隔离性。MVCC 通过在数据库中保存历史版本的数据来实现事务的隔离处理。每个事务读取到的是自己启动时的数据快照,不会受到其他并发事务的修改影响。

持久性(Durability)

        持久性指的是事务一旦提交成功,对数据库的改变将永久保存,并且一般情况下系统崩溃后仍然可以恢复。

        在银行例子中,如果事务T已经成功提交,并且A账户中的金额已经减少并转到了B账户,则即便系统故障也能够恢复到当前的状态。

如何保证持久性,是如何实现的?

        MySQL 使用事务日志(redo log)和内存来保证持久性。当进行数据修改时,事务日志会记录操作,以便在发生系统故障时进行恢复。同时,MySQL 还使用缓冲池来将数据缓存在内存中,以提高性能,并定期将数据刷写到磁盘上的数据文件,以保证持久性。

你可能感兴趣的:(mysql,数据库)