跳转到主内容
websoft网络软件专家 - 深耕网络技术,打造实用软件!

Oracle事务到底是个啥?一文搞懂ACID特性、并发问题和隔离级别!

Oracle事务到底是个啥?一文搞懂ACID特性、并发问题和隔离级别!

大家好,我是陈景序,今天我们来聊聊Oracle事务。如果你在Web开发中遇到过数据一致性问题,或者想知道如何保证数据库操作的原子性、一致性、隔离性和持久性,这篇文章你一定不能错过!

1. 事务概述

首先,什么是事务?简单来说,事务就是一个程序执行单元。在Oracle中,一个事务可以是一条SQL语句、一组SQL语句,甚至是一个完整的程序。

1. 什么是事务?
   (1) 字面意思   : 一般是指要做的或所做的事情
   (2) 在计算机中指: 一个程序执行单元('unit')   
2. 事务的组成
   (1) 事务开始(begin transaction) + 执行的操作 + 事务结束(end transaction)
   (2) 可以是一条 sql 语句、一组 sql 语句 或 整个程序

2. 事务的概念

事务有四个特性,简称ACID:

  • 原子性(atomicity):事务中的操作要么都做,要么都不做。
  • 一致性(consistency):事务必须是使数据库从 '一个一致性状态' 变到 '另一个一致性状态'。
  • 隔离性(isolation):一个事务的执行不能被其他事务 '干扰'。
  • 持久性(durability):一个事务一旦提交,它对数据库中数据的改变就应该是 '永久性' 的。

为了保证原子性,我们可以使用以下代码:

declare
begin -- 事务开始  
  update table set a = a + 1; -- 操作1
  update table set b = b + 1; -- 操作2
  commit; -- 提示事务
exception
  when others then
    rollback; -- 回滚事务
end; -- 事务结束

2.2 事务并发的问题

在多事务并发执行的情况下,可能会出现以下问题:

  • 脏读(Dirty Read):读取到的是脏数据(修改但 ‘未提交’ 的数据)。
  • 不可重复读(Nonrepeatable Read):同样的条件,前后读取的结果不一致。
  • 幻读(Phantom Read):和 “不可重复读” 类似,偏向 “新增” 和

相关文章