Oracle事务管理(之简单的部分)
2010-10-11 21:55
330 查看
事务(Transaction)是访问并可能更新数据库中各种数据项的一个程序执行单元(unit)。事务通常由高级数据库操纵语言或编程语言(如SQL,C++或Java)书写的用户程序的执行所引起,并用形如begin transaction和end transaction语句(或函数调用)来界定。事务由事务开始(begin transaction)和事务结束(end transaction)之间执行的全体操作组成。
例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
上面的这部分内容呢,是我从百度上面找到的,说的很好,也很全面,在Oracle当中事务可是个非常重要的概念,在以后学习三大框架比如Hibernate和sping当中的事务管理机制也是从概念上和这个类似,所以对事务必须要有深入的理解。
1,事务提交
在Oracle当中有些事务呢,需要手动提交,有些事务会自动提交,提交非自动提交的事务是采用commit命令。
比如当执行对数据库对象一级的结构的操作的时候,系统会自动提交
Create, alter, drop, rename, revoke, grant, connect,disconnect;
在这里呢,DDL语句操作是无法通过回滚的方式撤销的
2,事务回滚
要取消事务当中的操作,可以采用事务回滚Rollback命令。
这里呢,一般如果在进行大量的DML语句的操作的时候,事务不会自动提交,所以有的时候为了防止数据丢失,最好在操作结束时候commit
当然为了撤销操作,可以通过设置保存点来回滚,下面以一个例子为证:
Insert Into fangfan_dept values (30,'计算机','wuhan');
Insert Into fangfan_dept values (40,'财务','hefei');
savepoint a;
select * from fangfan_dept;
select * from fangfan_dept;
delete from fangfan_dept where deptno=50;
select * from fangfan_dept;
使用Rollback将依次回滚到a和b所在的操作的位置。这里很简单不说明了
那么请注意要是在两个还原点任意一个地方加上这么一句
create table fang_test as select * from dept;
那么它还能回滚吗?
答案是否定的,这里如果自己试试的话,你将会有很多有趣的结论。
Insert Into fangfan_dept values (50,'保洁','长沙');
delete from fangfan_dept where deptno=30 ;
savepoint b;
例如:在关系数据库中,一个事务可以是一条SQL语句,一组SQL语句或整个程序。
事务是恢复和并发控制的基本单位。
事务应该具有4个属性:原子性、一致性、隔离性、持续性。这四个属性通常称为ACID特性。
原子性(atomicity)。一个事务是一个不可分割的工作单位,事务中包括的诸操作要么都做,要么都不做。
一致性(consistency)。事务必须是使数据库从一个一致性状态变到另一个一致性状态。一致性与原子性是密切相关的。
隔离性(isolation)。一个事务的执行不能被其他事务干扰。即一个事务内部的操作及使用的数据对并发的其他事务是隔离的,并发执行的各个事务之间不能互相干扰。
持久性(durability)。持续性也称永久性(permanence),指一个事务一旦提交,它对数据库中数据的改变就应该是永久性的。接下来的其他操作或故障不应该对其有任何影响。
上面的这部分内容呢,是我从百度上面找到的,说的很好,也很全面,在Oracle当中事务可是个非常重要的概念,在以后学习三大框架比如Hibernate和sping当中的事务管理机制也是从概念上和这个类似,所以对事务必须要有深入的理解。
1,事务提交
在Oracle当中有些事务呢,需要手动提交,有些事务会自动提交,提交非自动提交的事务是采用commit命令。
比如当执行对数据库对象一级的结构的操作的时候,系统会自动提交
Create, alter, drop, rename, revoke, grant, connect,disconnect;
在这里呢,DDL语句操作是无法通过回滚的方式撤销的
2,事务回滚
要取消事务当中的操作,可以采用事务回滚Rollback命令。
这里呢,一般如果在进行大量的DML语句的操作的时候,事务不会自动提交,所以有的时候为了防止数据丢失,最好在操作结束时候commit
当然为了撤销操作,可以通过设置保存点来回滚,下面以一个例子为证:
Insert Into fangfan_dept values (30,'计算机','wuhan');
Insert Into fangfan_dept values (40,'财务','hefei');
savepoint a;
select * from fangfan_dept;
select * from fangfan_dept;
delete from fangfan_dept where deptno=50;
select * from fangfan_dept;
使用Rollback将依次回滚到a和b所在的操作的位置。这里很简单不说明了
那么请注意要是在两个还原点任意一个地方加上这么一句
create table fang_test as select * from dept;
那么它还能回滚吗?
答案是否定的,这里如果自己试试的话,你将会有很多有趣的结论。
Insert Into fangfan_dept values (50,'保洁','长沙');
delete from fangfan_dept where deptno=30 ;
savepoint b;
相关文章推荐
- 基于MVC,实现简单的书籍信息管理,其中,模型 (M) 采用一般的JavaBean、视图 (V)采用JSP、控制 (C) 采用Servlet实现。另外,对于视图部分的JSP中,需要提供两种版本,即一般
- Spring 事务管理高级应用难点剖析: 第 1 部分
- Spring 事务管理高级应用难点剖析: 第 1 部分
- Spring 事务管理高级应用难点剖析: 第 3 部分
- Spring 事务管理高级应用难点剖析: 第 3 部分
- Oracle 11g Release 1 (11.1)——简单管理聚簇
- 《微型电脑应用》2011年第11期刊登出《万能数据库查询分析器中的事务管理在Oracle中的应用》
- Hibernate学习5 事务管理简单例子购买股票
- Oracle 11g Release 1 (11.1) 表空间——简单管理永久表空间
- 关于Oracle处理DDL和DML语句的事务管理
- Spring 事务管理高级应用难点剖析: 第 2 部分
- Oracle PL/SQL 程序设计读书笔记 - 第14章 DML和事务管理
- << Oracle高可用>>部分书面作业 - 第三课 RAC-日常管理
- java-spring事务管理部分代码主要代码
- spring 事务管理简单理解(待修改)
- Spring 事务管理高级应用难点剖析: 第 2 部分
- Spring 事务管理高级应用难点剖析: 第 3 部分
- spring实现一个简单的事务管理
- 源码-Oracle数据库管理-第六章-索引和约束-约束部分-Part 1
- springboot+shiro+mybatis整合发现部分功能事务没有被spring管理