什么是事务,事务有哪几种特性

事务(Transaction)是数据库管理系统(DBMS)执行过程中的一个逻辑单位,它由一个或多个数据库操作序列组成。这些操作在逻辑上被视为一个不可分割的整体工作单元。事务的目的是为了保证即使在并发访问和系统故障的情况下,数据库也能保持数据的完整性和一致性。

一个经典的事务例子是银行转账:从账户A向账户B转账100元。这个操作包含两个步骤: 1. 从账户A的余额中减去100元。 2. 向账户B的余额中增加100元。

这两个步骤必须作为一个整体来执行。如果只完成了第一步而第二步失败(例如,因为系统突然崩溃),那么账户A的钱减少了,但账户B的钱没有增加,总金额就不平了,数据就处于不一致状态。事务机制确保了这两个操作要么都成功完成,要么如果其中任何一步失败,所有已做的修改都会被撤销(回滚),使数据库恢复到操作开始前的状态。

事务有四种基本特性,通常被称为ACID特性,它们是保证数据库可靠性的基石:

  1. 原子性(Atomicity):

    • 定义:原子性确保事务中的所有操作都是一个不可分割的单元。这些操作要么全部成功执行,要么在任何一个操作失败时全部回滚,数据库恢复到事务开始前的状态。
    • 理解:事务就像一个“原子”操作,不可再分。对于上面的转账例子,原子性保证了不会只发生“A账户扣款”而没有“B账户收款”的情况。
  2. 一致性(Consistency):

    • 定义:一致性保证事务的执行必须使数据库从一个一致的状态转变到另一个一致的状态。在事务开始之前和事务结束以后,数据库的完整性约束(如主键、外键、唯一性约束、业务规则等)没有被破坏。
    • 理解:一致性是事务的最终目标。对于转账例子,一致性意味着无论事务成功与否,银行系统中所有账户的总金额应该保持不变。如果事务成功,是A减少100,B增加100,总额不变;如果事务失败回滚,A和B的余额都回到初始状态,总额也不变。原子性、隔离性和持久性都是为了保证一致性而服务的。
  3. 隔离性(Isolation):

    • 定义:隔离性要求并发执行的多个事务之间应该是相互隔离的,即一个事务的执行不应被其他并发执行的事务干扰。从每个事务的角度看,它都感觉不到其他事务的存在,就好像系统中只有它自己在运行一样。
    • 理解:如果账户A同时在向账户B转账,并且也在向账户C转账,隔离性确保了这两个转账事务不会相互影响,每个事务看到的数据状态都是独立的、一致的。隔离性通过不同的隔离级别来定义其强度,以防止脏读、不可重复读、幻读等并发问题。
  4. 持久性(Durability):

    • 定义:持久性保证一旦事务成功提交(COMMIT),它对数据库的更改就是永久性的。即使在提交之后系统发生故障(如断电、服务器崩溃等),已提交的事务结果也不应丢失。
    • 理解:一旦银行系统提示转账成功,那么这个转账操作的结果就必须被永久记录下来。即使银行的服务器立即宕机重启,这笔转账也应该是完成了的,不能凭空消失。持久性通常通过数据库的日志系统(如Redo Log)和恢复机制来实现。
  5. 原子性(Atomicity):要么全做,要么全不做。

  6. 一致性(Consistency):事务前后,数据完整性约束保持不变。
  7. 隔离性(Isolation):并发事务之间互不干扰。
  8. 持久性(Durability):一旦提交,结果永久有效。