Oracle基础(七):数据库事务

一、基本概念

1、事务(Transaction):是并发控制的基本单位。所谓的事务,它是一个操作序列,这些操作要么都执行,要么都不执行,它是一个不可分割的工作单位。例如,银行转账工作:从一个账号扣款并使另一个账号增款,这两个操作要么都执行,要么都不执行。所以,应该把它们看成一个事务。事务是数据库维护数据一致性的单位,在每个事务结束时,都能保持数据一致性。

2、事务与锁

当执行事务操作时,oracle会在被作用的表上家锁,防止其他用户改表的结构。

3、事务的操作过程

1)事务的开始(默认自动开始):setAutoCommit(false)

2)设置保存点:savepoint pointAA

  • 可以设置多个保存点
  • 一旦回退以后,不能再次回退。

3)回滚到保存点(提交后无法回滚):rollback to pointAA;

4)事务提交:commit

2、事务具有以下4个基本特征。

  • Atomic(原子性):事务中包含的操作被看做一个逻辑单元,这个逻辑单元中的操作要么全部成功,要么全部失败。
  • Consistency(一致性):只有合法的数据可以被写入数据库,否则事务应该将其回滚到最初状态。
  • Isolation(隔离性):事务允许多个用户对同一个数据进行并发访问,而不破坏数据的正确性和完整性。同时,并行事务的修改必须与其他并行事务的修改相互独立。
  • Durability(持久性):事务结束后,事务处理的结果必须能够得到固化。

3、事务的语句

  • 开始事物:BEGIN TRANSACTION
  • 提交事物:COMMIT TRANSACTION
  • 回滚事务:ROLLBACK TRANSACTION

4、事务的保存点

SAVEPOINT pointName 保存点名称 --自定义保存点的名称和位置

ROLLBACK TO pointName  保存点名称
--回滚到自定义的保存点

二、事务隔离级别(isolation )

(一)标准事务隔离级别

1、READ UNCOMMITTED:读未提交

  • 发生脏读

2、READ COMMITTED:读已提交

  • 在trasaction A中读取数据时对记录添加共享锁,但读取结束立即释放。其它transaction B对这个记录的试图修改会一直等待直到A中的读取过程结束,而不需要整个trasaction A的结束。所以,在trasaction A的不同阶段对同一记录的读取结果可能是不同的。
  • 可能发生的问题:不可重复读。

3、REPEATABLE READ:可重复读

  • 对于读出的记录,添加共享锁直到transaction A结束。其它transaction B对这个记录的试图修改会一直等待直到trasaction A结束。
  • 可能发生的问题:当执行一个范围查询时,可能会发生幻读。

4、SERIALIZABLE:序列化

  • 添加范围锁(比如表锁,页锁等),直到transaction A结束。以此阻止其它trasaction B对此范围内的insert,update等操作。
  • 幻读,脏读,不可重复读等问题都不会发生。

(二)事务的问题

1、脏读

  • 当一个事务 A 读取另一个事务B 尚未提交的修改时,产生脏读。

2、不可重复读

  • 同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的修改或者删除,每次返回不同的结果集,此时发生非重复读。

3、幻读

  • 同一查询在同一事务 A 中多次进行,由于其他提交事务 B 所做的插入操作,每次返回不同的结果集,此时发生幻读。

(三)Oracle的隔离剂别

1、SQL92标准的

1)READ COMMITTED:读已提交

  • 这是oracle 默认的事务隔离机制
  • 保证不会脏读,单可能出现非重复读和幻读。

2)SERIALIZABLE:序列化

  • 提供了事务看起来像队列一样一个一个顺序执行。
  • 仅仅能看到在本事务开始前由其他事务提交的更改和在本事务中所做的更改。
  • 保证不会出现脏读、不可重复读和幻读
  • serializable:提供了read-only 事务所提供的读一致性,同时又允许DML(update\insert\delete)操作

2、非SQL92标准:read-only

  • 保证不会出现脏读、不可重复读和幻读
  • 只能读,不能操作DML(update\insert\delete)操作。

(四)设置Oracle的隔离剂别

1、设置一个事务的隔离级别

  • set transcation isolation level read committed;
  • set transcation isolation level serializable;
  • set transcation read-only;

2、设置整个会话的隔离级别

  • alter session set isolation_level read committed;
  • alter session set isolation_level serializable;

时间: 2024-10-16 16:02:26

Oracle基础(七):数据库事务的相关文章

数据库基础(数据库事务及存储过程的小练习)

数据库事务: 数据库事务(Database Transaction) 是指作为单个逻辑工作单元执行的一系列操作. 事务处理可以确保除非事务性单元内的所有操作都成功完成,否则不会永久更新面向数据的资源. 设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作: 更新客户所购商品的库存信息 保存客户付款信息--可能包括与银行系统的交互 生成订单并且保存到数据库中 · 更新用户相关信息,例如购物数量等等 正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新.

Oracle基础<1>--数据库设计

一:为什么需要使用数据库设计 数据库设计可以使数据库通过健壮的数据库结构  高效并且健康  的进行工作. 二.数据库设计原则 (数据库设计.系统设计.架构设计) 1.熟悉需求 保证之后需求的变更 不会影响到数据库的维护.更新.减少了工作成本 2.开发符合规范的数据库 (1).命名规范 (2).明确现实中的实体与数据表的关系 ·   (3).一张数据表不能既没有主键,也没有外键(主键是现实中实体的抽象,外键表示现实中实体之间的关系) (4).基本表的特征 原子性:基本表中的字段是不可在分解的 原始

Oracle基础 存储过程和事务

一.事务和存储过程 在存储过程中如何使用事务.当需要在存储过程中同时执行多条添加.修改.删除SQL语句时,为了保证数据完整性,我们需要使用事务.使用方式和在PL-SQL中非常相似,但也有一些区别. --带事务的存储过程 CREATE OR REPLACE PROCEDURE Account_zhuanzhang(fromuser NUMBER,touser NUMBER,money NUMBER) IS BEGIN UPDATE account SET balance = balance - m

[Java]Spring数据库事务基础知识

Spring虽然提供了灵活方便的事务管理功能,但这些功能都是基于底层数据库本身的事务处理机制工作的.要深入了解Spring的事务管理和配置,有必要先对数据库事务的基础知识进行学习. 何为数据库事务 "一荣俱荣,一损俱损"这句话很能体现事务的思想,很多复杂的事物要分步进行,但它们组成一个整体,要么整体生效,要么整体失效.这种思想反映到数据库上,就是多个SQL语句,要么所有执行成功,要么所有执行失败. 数据库事务有严格的定义,它必须同时满足 4 个特性:原子性(Atomic).一致性(Co

Oracle基础 数据库备份和恢复

原文:Oracle基础 数据库备份和恢复 一.为什么需要数据备份 造成数据丢失的主要原因: 1.介质故障. 2.用户的错误操作. 3.服务器的彻底崩溃. 4.计算机病毒. 5.不可预料的因素. Oracle中故障类型分为以下4种. 1.语句故障: 执行SQL语句过程发生的逻辑故障可导致语句故障.如果用户编写的SQL语句无效,就会发生语句故障.Oracle可自我修复语句故障,撤销语句产生的而印象,并将控制权交给应用程序. 2.用户进程故障 当用户程序出错而无法访问Oracle数据库时,就会发生用户

蜗牛—ORACLE基础之事务学习(五)

---------------事务---当执行到commit时 事务才算是完成,不然 会执行rollback操作. declare v_money acount.money%type:=1223; ex exception; begin update acount set money=money-v_money where id=1; raise ex; update acount set money=money+v_money where id=2; commit; exception whe

oracle数据库事务相关【weber出品必属精品】

事务的概念:事务:一个事务由一组构成一个逻辑操作的DML语句组成 事务有开始有结束,事务以DML语句开始,以Conmmit和Rollback结束.以下情况会使得事务结束: 1. 执行COMMIT 或者 ROLLBACK 语句 2. 执行DDL或者 DCL语句 3. 用户退出 4. 系统崩溃 一个事务可以包含下列语句: 1. 对数据做出一致性修改的DML语句 2. 一个 DDL 语句 3. 一个 DCL语句 DDL与和DCL语句执行的过程: 1. 首先发出COMMIT; 2. 执行对数据字典的DM

【转载:Oracle基础知识】Oracle数据库体系结构

先来看张直观的图:                                            oracle 11g 体系结构图 理解Oracle体系结构要充分理解三个概念:数据库(database),数据库实例(instance),会话(session),一定不要把这三个概念弄混. 数据库的概念 (A)    物理存储结构由数据文件.控制文件.重做日志文件组成: 1.       数据文件(datafile) select * from dba_data_files; 数据文件包括存

【持久层】数据库事务基础——事务的隔离级别

内容导读: 前三节数据库事务.并发带来的风险以及数据库锁都是为了铺垫事务的隔离性. 事务的隔离性不是无缘无故就存在的,他的存在是为了解决某一类问题,带来某一些操作的便捷:解决的问题是指数据库并发操作中数据一致性保证,带来的便捷是指定义好隔离级别之后,数据库会为操作自动加锁(不同的隔离级别拥有不同的自动锁粒度),而不用每次操作都手动的加锁. 写着写着觉得没什么可写的,本文已沦为简单的笔记···· 一.数据库事务 将一组数据库操作看作一个具备特殊数据库语义的执行单元,该执行单元具备ACID的事务属性

Oracle数据库事务编写的个人心得

在 Oracle数据库中,提供了一种被称为"事务"的控制机制.通过事物,能够完成对数据有效安全的修改操作,使数据库中的数据达到一个数据一致的状态.事 务可以把数据库的好几个操作步骤当作一个整体,当其中有某个操作没有成 功的话,则所有操作都会发生回滚.Oracle数据库就是通过这种机制来保障数据的一致性问题. 但是,事务若编写的不好的话,则不但起不到应有的作用,还会大大降低数据库的性能.如在数据库事务执行时间比较长,就很有可能导致锁冲突,从而降低数据库的并发访问性能.所以,数据库管理员在