事务(TRANSACTION)

事务(TRANSACTION)

事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。

从开始操作到提交(commit)的操作合集称为事务。

事务的提交 DCL(COMMIT/ROLLBACK):

  COMMIT:提交此次事务永久保存操作后的数据

  ROLLBACK:回滚到上次事务保存是的数据

  注:DDL 语句的操作会自带有提交的效果

事务的特性 ACID:

  原子性(Atomicity):事务是一个逻辑工作单元,是一个整体不可分割,一个事务中的所有操作(DML语句)要么全都执行(COMMIT),要么全都不执行(ROLLBACK)

  一致性(Consistency):事务结束前后,每个用户看到的数据都是一致的

  隔离性(Isolation):在事务结束之前,它操作的数据,对其他用户不可见,是隔离的

  持久性(Durability):事务提交(COMMIT)成功后,结果是永久的,不能回滚(ROLLBACK)

事务的隔离级别:

  READ COMMITTED(读已提交):Oracle 默认使用 READ COMMITTED,防止脏读,常用于提升性能和并发性

  SERIALIZABLE(可串行化):最高的隔离级别,事务独立执行,模拟串行顺序发生,提供一致性但可能降低并发性能

  READ ONLY(只读):事务只允许读操作,不允许修改,用于确保数据一致性读取

隔离级别可能导致以下问题:脏读、不可重读读、幻读

  脏读:当一个事务正在修改某一数据并且还没有提交时,另一个事务可以读取到这个未提交的数据,这种情况通常发生在 READ UNCOMMITTED(读未提交) 隔离级别下

  不可重读读:一个事务在两次读取操作之间,另一个事务对同一数据进行了修改并提交,导致前后读取的数据不一致,这种情况通常发生在 READ COMMITTED(读已提交) 隔离级别下

   幻读:在一个事务内,执行相同查询时结果集的行数可能发生变化。这是因为另一事务插入或删除了数据行。 这种情况通常发生在 READ COMMITTED(读已提交) 和 REPEATABLE READ(可重复读) 隔离级别下

  脏读 是最严重的问题,因为它涉及读取未提交的数据。

  不可重复读 和 幻读 都涉及到读取已提交的数据,但它们的区别在于:

    不可重复读是指同一行数据被修改。

    幻读是指结果集中的行数发生变化(例如,插入或删除行)

 

posted @ 2025-06-18 18:55  wwwwxxxx  阅读(82)  评论(0)    收藏  举报