K.I.S.S---Keep IT Simple,Stupid!    人生苦短,我用Python

数据库事务概念解析

 
分类: 问答 2025年6月5日
简介:什么是“事务”(Transaction)? 在数据库中,事务是一组操作的集合,这些操作要么全部成功执行,要么全部失败回滚。事务用于保证数据库的 一致性、完整性 和 可靠性,即使在系统崩溃或出现错误的情况下。

事务(Transaction)是由一组数据库操作序列组成的逻辑单元,这些操作要么全部成功执行(提交),要么全部无效(回滚)。核心目标是保证数据从一种一致状态转换到另一种一致状态。

 

“事务”(Transaction)作为数据库中的概念,最早是在 20世纪70年代 随着数据库管理系统(DBMS)的发展逐步明确提出的,尤其是在关系型数据库理论建立之后。

事务的提出历史简要回顾:

1. 关系数据库的起源(1970)

  • 1970年:IBM 的 E.F. Codd 发表著名论文《A Relational Model of Data for Large Shared Data Banks》。

  • 该论文确立了关系数据库的基本理论,为事务概念的提出打下基础。

 2. 事务模型的正式出现(1970年代中后期)

  • IBM 在开发其关系数据库系统 System R(1974~1977) 时,首次 系统性地提出了“事务”概念和ACID模型的雏形

  • 事务是为了支持并发处理、系统崩溃恢复而引入的,用于保证数据库的正确性和稳定性。

 3. ACID 四大特性由 IBM 研究员 Jim Gray 明确提出(1981)

  • Jim Gray(图灵奖得主)在其研究中正式提出并定义了事务的四大核心特性:ACID(Atomicity, Consistency, Isolation, Durability)

  • 他的贡献是事务理论正式确立和工业化应用的关键。

 

 

事务的四大特性(ACID)

这是理解事务的核心:

特性 英文 含义
原子性 Atomicity 事务中的所有操作要么全部执行,要么全部不执行。
一致性 Consistency 事务执行前后,数据必须保持一致(满足所有规则和约束)。
隔离性 Isolation 并发执行的事务互不干扰。
持久性 Durability 事务提交后,对数据库的更改是永久性的,即使系统崩溃也不会丢失。

 

常见事务操作命令(SQL中):

命令 作用
BEGINSTART TRANSACTION 开始事务
COMMIT 提交事务
ROLLBACK 回滚事务
SAVEPOINT 设置回滚点
SET TRANSACTION 设置事务的隔离级别等

 

事务的隔离级别

为了平衡性能和数据一致性,数据库定义了不同的隔离级别,解决并发事务可能导致的问题(如脏读、不可重复读、幻读)。常见的隔离级别包括:

  1. 读未提交(Read Uncommitted):最低隔离级别,可能导致脏读。
  2. 读已提交(Read Committed):避免脏读,但可能发生不可重复读。
  3. 可重复读(Repeatable Read):避免不可重复读,但可能发生幻读。
  4. 序列化(Serializable):最高隔离级别,完全隔离事务,性能最低。

事务的并发问题

并发执行事务可能引发以下问题:

  1. 脏读(Dirty Read):读取到未提交的数据,若事务回滚,数据无效。
  2. 不可重复读(Non-repeatable Read):同一事务内多次读取同一数据,结果不同。
  3. 幻读(Phantom Read):同一事务内多次查询,出现新增或删除的行。
  4. 丢失更新(Lost Update):多个事务同时更新同一数据,导致更新丢失。

事务的实现机制

数据库通过以下机制支持事务:

  1. 日志(Logging):记录事务的每一步操作,用于故障恢复(如WAL,Write-Ahead Logging)。
  2. 锁(Locking):通过独占锁或共享锁控制并发访问。
  3. 多版本并发控制(MVCC):为每个事务提供数据快照,避免锁竞争。

SQL标准定义了4种隔离级别(控制严格度递增):

隔离级别 脏读 不可重复读 幻读 实现机制
READ UNCOMMITTED 无锁(实际极少使用)
READ COMMITTED 语句级快照(如Oracle/PostgreSQL默认)
REPEATABLE READ 事务级快照(MySQL InnoDB默认)
SERIALIZABLE 强制事务串行执行

事务(Transaction)一般用于以下几种 需要确保数据一致性、完整性、安全性 的典型场景:

场景 原因
银行转账 要么两边账户都更新成功,要么都失败,不能只扣款不入账。
订单处理系统 下单时库存减少、订单记录生成、支付状态变更必须一致。
库存管理 商品出库和库存变更必须配套,避免重复发货或数据错乱。
日志写入 + 数据变更 数据更新和操作记录必须同时成功,否则就要全部撤销。



注:当前文章会不定期进行更新。如果您对本文有更好的建议,有新资料推荐, 可以点击: 欢迎分享优秀网站
这个位置将来会放广告

我想等网站访问量多了,在这个位置放个广告。网站纯公益,但是用爱发电服务器也要钱啊 ----------狂奔的小蜗牛