今天编码遇到一个问题,花费了很长时间,最后才知道是忘记提交事务照成的,所以来温习了一下oracle的事务机制
1.事务定义
事务是保持数据的一致性,它由相关的DDL或者DML语句做为载体,这组语句执行的结果要么一起成功,要么一起失败。
我们知道SQL92标准定义了数据库事务的四个特点:
原子性 (Atomicity) :一个事务里面所有包含的SQL语句是一个执行整体,不可分割,要么都做,要么都不做
一致性 (Consistency) :事务开始时,数据库中的数据是一致的,事务结束时,数据库的数据也应该是一致的
隔离性 (Isolation): 多个事务并发的独立运行,而不能互相干扰,一个事务修改,新增,删除数据在根据当前事务的事务隔离级别基础上,其余事务能看到相应的结果(这里为什么这么说,下面我会给我具体的例子进行分析)
持久性 (Durability) : 事务被提交后,数据会被永久保存
2. 事务控制命令
COMMIT 提交事务
SAVEPOINT 事务保存点 (savepoint a)
ROLLBACK(TO) 回滚[回滚到定义的保存点] rollback to a
3. 锁的概念
锁是为了保证多个并发的事务在引用同一个资源时,对资源的保护,同时也防止事物间的相互破坏。
4. Oracle中锁类型
共享锁(表锁)共享锁有一下几种模式
行共享模式 : 不运行其它用户插入,删除,更新操作,多个用户可以同时作用于该表,都能查询。语法如下:Lock table XX in share mode
行共享更新模式 : 允许多个用户同时锁定表中不同的行,能执行DML语句,除了那些被锁定的行。
排他锁(行锁): 不允许其它用户对该表插入,删除,修改操作,只能查询,同时其它用户不能修改和锁定表
死锁 : 所个事务对资源的相互等待,造成死锁。
5. 事务隔离级别
事务隔离级别定义了事务之间的隔离程度。SQL92标准中定义了4中隔离级别。
未提交读 (READ UNCOMMITTED) 幻想读、不可重复读和脏读都允许。
提交读 (READ COMMITTED) 允许幻想读、不可重复读,不允许脏读。
重复读 (REPEATABLE READ) 允许幻想读,不允许不可重复读和脏读。
序列化 (SERILIZABLE) 幻想读、不可重复读和脏读都不允许。
通过一些现象,可以反映出设置事务隔离级别产生的效果:
幻想读(幻读): 事务T1读取一条指定where条件的语句,返回结果集。此时事务T2插入一行新记录,恰好满足T1的where条件。然后T1使用相同的条件再次查询,结果集中可以看到T2插入的记录,这条新纪录就是幻想。
脏读: 事务T1修改了一条数据,但是还未提交,事务T2恰好读取到了这条修改后了的数据,此时T1将事务回滚,这个时候T2读取到的数据就是脏数据,称为脏读。
不可重复读取:事务T1读取一行记录,紧接着事务T2修改了T1刚刚读取的记录,然后T1再次查询,发现与第一次读取的记录不同,这称为不可重复读。
6.Oracle的事务隔离级别
ORACLE提供了SQL92标准中的read committed和serializable,同时提供了非SQL92标准的read-only。
READ COMMITTED
这是ORACLE缺省的事务隔离级别。
事务中的每一条语句都遵从语句级的读一致性。
保证不会脏读;但可能出现非重复读和幻像。
SERIALIZABLE
简单地说,serializable就是使事务看起来象是一个接着一个地顺序地执行。
仅仅能看见在本事务开始前由其它事务提交的更改和在本事务中所做的更改(也就是说其它事务在本事务开始后所做的修改,即使提交了,本事务也看不到)
保证不会出现非重复读和幻像。
Serializable隔离级别提供了read-only事务所提供的读一致性(事务级的读一致性),同时又允许DML操作.
设置隔离级别
设置一个事务的隔离级别
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
SET TRANSACTION ISOLATION LEVEL SERIALIZABLE;
SET TRANSACTION READ ONLY;
设置单个会话的隔离级别
ALTER SESSION SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
ALTER SESSION SET TRANSACTION ISOLATION SERIALIZABLE;
如果事务设定了序列化的隔离级别,那么在该事务期间,其它事务对该事物中引用的资源修改将不可见。
文章出处:http://kingj.iteye.com/blog/1675011
分享到:
相关推荐
本文将深入探讨数据库事务的基本概念、特性以及如何在Spring框架中配置和使用事务管理。同时,我们还将提及与事务管理相关的几个库,包括c3p0、dbcp2和pool2,并讨论它们在连接池中的角色。 1. **数据库事务**: -...
数据库事务是数据库操作的核心概念,尤其在C#编程中,理解并熟练运用数据库事务对于确保数据的完整性和一致性至关重要。数据库事务确保了在多步骤操作中,如果其中一个步骤失败,整个事务可以被回滚,从而避免了数据...
数据库事务处理是数据库管理系统中的核心概念,用于确保数据的一致性和完整性。事务是数据库操作的基本单元,它包含一组逻辑操作,这些操作要么全部执行,要么全部不执行,以确保数据的原子性。事务处理主要关注两个...
数据库事务:对数据库事务的讲解,事务的概念 理解事务的特性、分类
【Redis 事务与关系型数据库事务的比较】 Redis 和关系型数据库(如 MySQL)在事务处理上有显著的差异。在Redis中,事务提供了一种批量执行命令的方式,以确保原子性,但其机制与传统的ACID(原子性、一致性、隔离...
java代码-使用java解决数据库事务处理的源代码 ——学习参考资料:仅用于个人学习使用!
### 数据库事务应用详解 #### 事务处理的重要性与ACID特性 事务处理是现代数据库管理系统(DBMS)中不可或缺的一部分,尤其对于那些涉及复杂业务逻辑、需要确保数据一致性和完整性的应用来说更是如此。事务处理的...
共计132页的ppt,详细讲述数据库事务处理技术
数据库事务是数据库操作的核心概念,它是数据库管理系统执行过程中的一个逻辑工作单位,包含了对数据库的一系列操作。在数据库系统中,事务确保数据的一致性和完整性,使得即使在系统出现故障或者并发操作的情况下,...
分布式数据库事务处理是数据库系统中的一个重要概念,尤其是在大型企业级应用和互联网服务中,它能够保证数据的一致性和完整性,即使在多台计算机之间进行数据操作。COM+(Component Object Model Plus)是微软提出...
数据库事务管理数据库事务管理
介绍数据库事务的四种隔离级别,比较不同隔离级别的区别和影响
### DB2数据库事务日志详解及处理方法 #### 一、引言 在数据库管理领域,尤其是对于IBM DB2这样的大型关系型数据库管理系统而言,事务日志管理是至关重要的环节之一。事务日志用于记录数据库中的所有事务操作,确保...
数据库事务管理及锁机制原理剖析:包括事务特性 ACID、数据隔离级别、事务实现的原理、锁机制,及过程中可能遇到的查询效率及死锁问题等
"数据库基础数据库事务处理" 数据库事务处理是数据库系统的基本概念,允许用户对数据进行更改,然后决定是保存还是放弃所做的更改。事务处理是一个不可分割的工作单位,多个步骤绑定在一起形成一个逻辑操作,包含...
本文将深入探讨C#语言中与数据库事务相关的原理及实践,包括事务的定义、特性、类型,以及如何在C#中利用Entity Framework(EF)进行事务开发和管理。 首先,我们需要理解什么是事务。在数据库系统中,事务是一组...
数据库事务日志是数据库管理系统中一个至关重要的组成部分,它记录了数据库中所有事务的详细操作记录。这些日志对于确保数据库的一致性、持久性和可恢复性至关重要。本文将详细探讨数据库事务日志的概念、作用、实现...