首页 > 其他分享 >【面试】事务的ACID特性有哪些?是如何保证的?

【面试】事务的ACID特性有哪些?是如何保证的?

时间:2024-08-19 16:55:00浏览次数:11  
标签:事务 哪些 数据库 面试 提交 一致性 日志 ACID 数据库系统

面试模拟场景

面试官: 你能解释一下事务的ACID特性有哪些?是如何保证的?

参考回答示例

候选人: 当然可以。事务的ACID特性是数据库系统中保证数据一致性和可靠性的关键特性。ACID是原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)和持久性(Durability)的缩写。以下是每个特性及其在数据库系统中如何被保证的详细解释。

1. 原子性(Atomicity)

定义:

  • 原子性指的是事务的所有操作要么全部完成,要么完全不执行。即在事务结束时,事务中的所有操作都作为一个整体,要么都被提交(commit),要么都被回滚(rollback)。

保证方法:

  • 事务日志(Transaction Log): 数据库系统使用事务日志来记录事务的每个操作。在事务执行过程中,所有更改都会被记录到日志中。在提交(commit)之前,日志确保了即使系统崩溃,数据库也能通过回滚未完成的事务来恢复一致性。
  • 回滚机制(Rollback Mechanism): 如果在事务执行过程中发生错误,数据库系统会使用回滚操作撤销所有已完成的操作,以恢复到事务开始前的状态,从而保证原子性。

示例:

BEGIN TRANSACTION;
UPDATE accounts SET balance = balance - 100 WHERE account_id = 1;
UPDATE accounts SET balance = balance + 100 WHERE account_id = 2;
COMMIT;
-- 如果在其中一条 UPDATE 语句后发生错误,事务会回滚,不会改变账户余额。

2. 一致性(Consistency)

定义:

  • 一致性确保事务在执行前后,数据库从一个一致的状态转变为另一个一致的状态。任何违反数据库约束、规则或触发器的操作都不能提交。

保证方法:

  • 数据库约束(Constraints): 数据库定义了各种约束(如主键、外键、唯一性约束等),确保数据的完整性和一致性。在事务提交时,这些约束会被检查,确保数据满足所有一致性规则。
  • 触发器(Triggers): 触发器可以自动执行特定操作,以确保数据库的一致性。例如,触发器可以在插入或更新数据时检查业务规则,防止不符合业务逻辑的数据进入数据库。
  • 应用层逻辑: 在应用层,通过验证输入数据和执行必要的业务逻辑,也可以确保数据的一致性。事务只有在满足所有规则的情况下才会被提交。

示例:

BEGIN TRANSACTION;
UPDATE orders SET status = 'SHIPPED' WHERE order_id = 123;
INSERT INTO shipments(order_id, ship_date) VALUES(123, NOW());
COMMIT;
-- 确保每个发货记录都对应一个已发货订单,保证一致性。

3. 隔离性(Isolation)

定义:

  • 隔离性保证了并发事务之间互不干扰,每个事务看到的数据库状态应当与其他事务独立,即事务的中间状态对其他事务不可见。

隔离级别:
数据库系统通过设置不同的隔离级别来控制事务的并发行为,常见的隔离级别包括:

  • 读未提交(Read Uncommitted): 事务可以看到其他未提交事务的中间状态,可能导致脏读(Dirty Read)。
  • 读已提交(Read Committed): 事务只能看到其他已提交事务的结果,防止脏读。
  • 可重复读(Repeatable Read): 事务开始后,所有读取的行数据在事务结束前不会改变,防止不可重复读。
  • 可序列化(Serializable): 事务完全隔离,仿佛事务是顺序执行的,防止幻读(Phantom Read)。

保证方法:

  • 锁机制(Locks): 数据库系统通过行级锁、表级锁等锁机制来控制并发事务的访问。不同的隔离级别使用不同的锁策略来防止并发问题。
  • 多版本并发控制(MVCC, Multi-Version Concurrency Control): MVCC通过维护数据的多个版本来实现事务隔离,避免事务之间的锁竞争,提高并发性。例如,事务可以读取快照数据而不阻塞其他事务的写操作。

示例:

SET TRANSACTION ISOLATION LEVEL REPEATABLE READ;
BEGIN TRANSACTION;
SELECT balance FROM accounts WHERE account_id = 1;
-- 事务内再次查询 account_id = 1 的 balance,结果不会改变,即使其他事务修改了该账户的余额。

4. 持久性(Durability)

定义:

  • 持久性确保一旦事务提交,其结果就会永久地保存在数据库中,即使系统崩溃或发生故障,数据也不会丢失。

保证方法:

  • 写前日志(WAL, Write-Ahead Logging): 在事务提交之前,所有的更改都会先写入日志文件。即使系统崩溃,数据库也可以使用这些日志重做事务,确保数据的持久性。
  • 持久化存储: 数据库系统通过将数据写入持久化存储设备(如磁盘、SSD)来保证数据的持久性。提交事务时,数据库确保所有数据已被安全写入存储设备。
  • 同步刷新(fsync): 在提交事务时,数据库系统会调用操作系统的同步刷新命令(如fsync)来确保日志或数据文件被安全地写入磁盘,防止系统崩溃导致数据丢失。

示例:

BEGIN TRANSACTION;
INSERT INTO transactions(account_id, amount) VALUES(1, 100);
COMMIT;
-- 事务一旦提交,插入的数据即使系统崩溃也不会丢失。

5. 总结

数据库通过一系列技术和机制来确保事务的ACID特性:

  • 原子性(Atomicity) 通过事务日志和回滚机制来保证。
  • 一致性(Consistency) 通过数据库约束、触发器和应用逻辑来保证。
  • 隔离性(Isolation) 通过锁机制和MVCC来实现,控制事务的并发行为。
  • 持久性(Durability) 通过写前日志和持久化存储来保证数据在事务提交后的持久保存。

标签:事务,哪些,数据库,面试,提交,一致性,日志,ACID,数据库系统
From: https://blog.csdn.net/Lewiz_124/article/details/141326127

相关文章

  • 【面试】介绍几种常见的进程调度算法及其流程
    面试模拟场景面试官:你能介绍一下几种常见的进程调度算法及其流程吗?参考回答示例进程调度是操作系统管理进程的核心功能,负责在多任务环境中分配CPU时间给各个进程。常见的进程调度算法包括先来先服务(FCFS)、短作业优先(SJF)、优先级调度、轮转调度(RR)以及多级反馈队列调度等......
  • 【面试】阐述TCP和UDP的区别
    面试模拟场景面试官:你能阐述一下TCP和UDP的区别吗?###参考回答示例1.连接性TCP:面向连接(Connection-Oriented):TCP是一种面向连接的协议,在传输数据之前需要建立连接。在TCP通信过程中,客户端和服务器之间通过“三次握手”来建立连接,然后再进行数据传输,确保两者之间的......
  • Java中的可达性分析算法图解,以及哪些对象可以作为GCRoots
    可达性分析算法图示:解释:因为在GCRoots中存在对于对象A的引用,而A又持有对对象B和对象C的引用,所以这一串都是有用的引用链,需要保留。对于对象D和对象E,他们只是相互进行引用,并没有和GCRoots中的对象有任何的关联,所以可以安全的回收。哪些对象可以作为GCRoots虚拟机栈(栈帧中的......
  • .NET面试题系列(27)反射
    序言 应该场景数据库对象转实体 publicstaticList<T>TableToList<T>(DataTabletable)whereT:classORMAutoMapperSystem.TypeSystem.Type类对于反射起着核心的作用。但它是一个抽象的基类,Type有与每种数据类型对应的派生类,我们使用这个派生类的对象的方法、字段......
  • 该如何面对大量的简历筛选和繁琐的面试流程???
    在当今这个人才竞争激烈的时代,招聘工作变得越来越复杂和具有挑战性。HR在招聘过程中需要从成百上千的简历中筛选出符合岗位要求的候选人,然后面试官通过面试进一步评估他们的技能和文化适应性。过程不仅耗时而且效率低下,尤其是对于大型企业而言,面对海量的简历和面试,如何快速而准......
  • 常见面试题问题及答案
    常见面试题问题及答案1、什么是API端点(APIendpoint)?说说相关技术点用于访问特定资源或功能的网络地址或URI,代表了API的一个具体操作或服务,并定义了客户端与服务器之间进行交互的方式;1:URI(统一资源标识符),包含了协议(如HTTP/HTTPS)、主机名、路径、查询参数等2:请求方法,GET(获......
  • 派歌锐:新能源汽车电气系统的线束有哪些?
    新能源汽车的电气系统,尤其是其线束设计,是确保车辆性能和安全性的关键因素之一。以下是对新能源汽车电气系统中不同类型线束的介绍: 一、汽车高压线束1.高压分配线束:功能:负责将电池系统中的高压电能传输到驱动电机和辅助设备。要求:必须具有良好的绝缘性能和耐高温性,以确保......
  • Mybatis的一些常用知识点(面试)
    什么是MyBatis?Mybatis是⼀个半ORM(对象关系映射)框架,它内部封装了JDBC。它让开发者在开发时只需要关注SQL语句本身,不需要花费精⼒去处理加载驱动、创建连接等繁杂的过程缺点:SQL语句的编写⼯作量较⼤SQL语句依赖于数据库,导致数据库移植性差,不能随意更换数据库MyBat......
  • 信息保密风险控制措施有哪些?这5大宝藏措施强势来袭,快去get吧!
    信息保密风险控制是确保数据安全、防止未经授权访问和泄露的关键环节。以下是五大强势的信息保密风险控制措施,帮助企业或个人有效管理信息保密风险。1.实施严格的访问控制分级管理:对涉密信息实施分级管理,根据密级设置不同的访问权限,确保每位员工仅能访问完成工作所必需的......
  • 【面试题 02.07. 链表相交 简单】
    题目:同:160.链表相交给你两个单链表的头节点headA和headB,请你找出并返回两个单链表相交的起始节点。如果两个链表没有交点,返回null。图示两个链表在节点c1开始相交:题目数据保证整个链式结构中不存在环。注意,函数返回结果后,链表必须保持其原始结构。示例1......