事务与并发控制
约 585 字大约 2 分钟
作者寄语:
事务与并发控制是数据库系统的核心机制,确保在多用户同时操作数据时,系统仍能维持数据的一致性和可靠性。本节将简单介绍事务的ACID特性、并发引发的问题及解决方案(如隔离级别和锁机制)。
事务的ACID特性
事务(Transaction)是数据库操作的逻辑单元,满足以下四个特性:
特性 | 描述 | 示例 |
---|---|---|
原子性(Atomicity) | 事务内的操作要么全部成功,要么全部失败(回滚)。 | 转账操作:A账户扣款和B账户入账必须同时成功或失败。 |
一致性(Consistency) | 事务执行前后,数据库必须处于一致状态(符合业务规则)。 | 订单支付后,库存必须减少,总金额必须匹配。 |
隔离性(Isolation) | 并发执行的事务互不干扰,如同串行执行。 | 用户A查询库存时,用户B的扣减操作不应导致A看到中间状态。 |
持久性(Durability) | 事务提交后,对数据的修改永久保存,即使系统崩溃也不丢失。 | 转账成功后,即使数据库宕机,恢复后数据仍为转账后的状态。 |
并发引发的数据问题
当多个事务并发执行时,可能引发以下问题:
问题 | 描述 | 示例 |
---|---|---|
脏读(Dirty Read) | 事务A读取了事务B未提交的数据,B可能回滚,导致A读到无效数据。 | 用户A看到订单状态为“已支付”,但支付事务未提交,最终回滚。 |
不可重复读(Non-Repeatable Read) | 事务A多次读取同一数据,事务B在此期间修改了该数据,导致A两次读取结果不一致。 | 用户A两次查询库存,中间有用户B下单导致库存减少,结果不一致。 |
幻读(Phantom Read) | 事务A读取了符合条件的数据集,事务B插入新数据,导致A再次读取时出现“幻影行”。 | 用户A查询价格<100的商品有5件,事务B新增一件后,A再次查询变为6件。 |