interview
backend-classic
什么是数据库事务讲一下事务的 ACID 特性

后端经典面试题合集, 什么是数据库事务?讲一下事务的 ACID 特性?

后端经典面试题合集, 什么是数据库事务?讲一下事务的 ACID 特性?

QA

Step 1

Q:: 什么是数据库事务?

A:: 数据库事务是一组作为单个逻辑工作单元执行的操作,这些操作要么完全成功,要么完全失败。事务确保系统始终处于一致的状态,即使在出现系统故障或其他问题的情况下。一个事务可以包括一个或多个SQL操作,如插入、更新、删除等。

Step 2

Q:: 讲一下事务的ACID特性?

A:: ACID是指事务的四个关键特性:

1. 原子性(Atomicity):事务的所有操作要么全部执行,要么全部不执行。即使系统在执行事务的过程中发生故障,事务也会回滚到初始状态。 2. 一致性(Consistency):事务完成后,数据库必须处于一致的状态。所有数据都必须符合数据库的规则,例如外键约束、触发器等。 3. 隔离性(Isolation):多个事务同时执行时,一个事务的中间状态对其他事务不可见。事务间的操作是相互独立的,确保并发执行时的数据正确性。 4. 持久性(Durability):一旦事务提交,其结果必须永久保存在数据库中,即使发生系统崩溃或断电,事务的结果也不会丢失。

Step 3

Q:: 为什么事务的ACID特性很重要?

A:: 事务的ACID特性确保了在并发操作、高负载情况下数据库的可靠性和一致性。原子性防止了部分更新的问题,一致性确保了数据的完整性,隔离性防止了并发冲突,持久性确保了数据的长期存储。这些特性对于金融系统、库存管理、银行交易等关键业务应用至关重要。

用途

面试关于事务和ACID特性的内容是为了评估候选人在构建可靠、稳定的后端系统时对数据库操作的理解。事务是数据库操作的核心,尤其是在处理关键业务逻辑、并发操作以及需要保证数据一致性和完整性的场景下。事务的概念在银行转账、订单处理、库存管理等需要确保操作完整性的场景中非常常见。\n

相关问题

🦆
什么是事务的隔离级别?

事务的隔离级别定义了多个事务如何相互影响。常见的隔离级别包括:

1. 读未提交(Read Uncommitted):事务可以读取其他事务未提交的数据,可能导致脏读。 2. 读已提交(Read Committed):事务只能读取其他事务已提交的数据,避免脏读,但可能导致不可重复读。 3. 可重复读(Repeatable Read):事务在执行过程中可以多次读取同一行数据,且读取结果一致,避免不可重复读,但可能导致幻读。 4. 串行化(Serializable):最高级别的隔离,事务逐一执行,完全避免并发问题,但效率最低。

🦆
什么是脏读,不可重复读和幻读?

这些是数据库并发操作中可能出现的问题:

1. 脏读(Dirty Read):一个事务读取了另一个事务未提交的数据,导致数据不一致。 2. 不可重复读(Non-repeatable Read):一个事务在执行过程中读取同一行数据两次,且两次读取结果不同,通常是因为另一个事务在两次读取之间对该行数据进行了更新。 3. 幻读(Phantom Read):一个事务在两次执行查询时,结果集发生了变化,因为另一个事务插入或删除了数据行,导致查询结果不一致。

🦆
如何处理数据库中的死锁?

死锁发生在两个或多个事务相互等待对方释放资源的情况下,导致事务无法继续执行。常见的处理方法包括:

1. 死锁检测:数据库系统自动检测死锁并强制回滚一个或多个事务以打破死锁。 2. 死锁预防:通过合理的锁定顺序或超时机制来预防死锁的发生。 3. 死锁回滚:当检测到死锁时,回滚代价较小的事务以释放资源。

🦆
解释乐观锁和悲观锁的区别?

乐观锁和悲观锁是并发控制的两种机制:

1. 乐观锁(Optimistic Locking):假设并发操作不会发生冲突,只有在提交时检查冲突。如果检测到冲突,则回滚事务。这种方式适用于读取频繁、写入较少的场景。 2. 悲观锁(Pessimistic Locking):假设并发操作会发生冲突,因此在读取或修改数据前先锁定资源,直到事务完成。这种方式适用于写操作频繁的场景。