ORACLE事务的原子性
2007-10-21 10:12
330 查看
ORACLE的事务与SQL server以及sybase有很大的不同,举个例子,假如表a有以下记录:
field1
1
3
0
4
其中对field1字段的约束条件是field1>0,那么当我们执行update a set field1=field1-1这条SQL语句时,将会出现一个错误,因为其中的第三条记录的field1等于0,减去1之后就会违反约束条件。
那么在SQL server或sybase中,出现这种错误之后,必须使用回滚来使表a回到修改之前的情况,否则第一二条记录的修改将会被保留;而在ORACLE中,表a还是会保持原样,所有的记录不会有任何变化。
这就是ORACLE事务的一个特性:原子性,SQL语句的效果是要么全部提交,要么全部回滚。如果语句出现错误,那么这条语句在错误之前的已经发生全部修改都回滚。
在ORACLE的事务处理中,存储过程的调用也是作为一个语句来看待的。也就是说,在调用ORACLE中调用存储过程,如果存储过程中出现了错误,ORACLE会自动回滚到存储过程被调用前的情况。
在SQL server和sybase中,事务是必须显示地开始的,否则每个语句本身就是一个事务,而在ORACLE中,事务是隐式的,没有办法自动提交,除非客户端的专门实现,例如ODBC和JDBC默认是会自动提交的(当然你也可以使用设置连接的属性来把事务的控制权取回来)。
对于有些情况下,我们可能需要保存已经进行的修改,那就需要when others来处理了,在exception处理中加上when others then null就会忽略语句中的错误,继续下去。
在ORACLE中,如下的语句:
begin
savepoint sp;
update a set field1=field1-1;
exception
when others then
rollback to sp;
end;
这种写法是完全没有必要的,因为这实际上是ORACLE自动事务的模仿,是一种重复。对于ORACLE事务的原子性和一致性已经实现的东西,实在没有必要再去重复。
field1
1
3
0
4
其中对field1字段的约束条件是field1>0,那么当我们执行update a set field1=field1-1这条SQL语句时,将会出现一个错误,因为其中的第三条记录的field1等于0,减去1之后就会违反约束条件。
那么在SQL server或sybase中,出现这种错误之后,必须使用回滚来使表a回到修改之前的情况,否则第一二条记录的修改将会被保留;而在ORACLE中,表a还是会保持原样,所有的记录不会有任何变化。
这就是ORACLE事务的一个特性:原子性,SQL语句的效果是要么全部提交,要么全部回滚。如果语句出现错误,那么这条语句在错误之前的已经发生全部修改都回滚。
在ORACLE的事务处理中,存储过程的调用也是作为一个语句来看待的。也就是说,在调用ORACLE中调用存储过程,如果存储过程中出现了错误,ORACLE会自动回滚到存储过程被调用前的情况。
在SQL server和sybase中,事务是必须显示地开始的,否则每个语句本身就是一个事务,而在ORACLE中,事务是隐式的,没有办法自动提交,除非客户端的专门实现,例如ODBC和JDBC默认是会自动提交的(当然你也可以使用设置连接的属性来把事务的控制权取回来)。
对于有些情况下,我们可能需要保存已经进行的修改,那就需要when others来处理了,在exception处理中加上when others then null就会忽略语句中的错误,继续下去。
在ORACLE中,如下的语句:
begin
savepoint sp;
update a set field1=field1-1;
exception
when others then
rollback to sp;
end;
这种写法是完全没有必要的,因为这实际上是ORACLE自动事务的模仿,是一种重复。对于ORACLE事务的原子性和一致性已经实现的东西,实在没有必要再去重复。
相关文章推荐
- oracle事务的原子性
- oracle 事务原子性
- Oracle 事务ACID基本概念(原子性、一致性、隔离性、持久性)
- oracle存储过程自治事务
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- oracle事务与锁
- Oracle的学习三:java连接Oracle、事务、内置函数、日期函数、转换函数、系统函数
- Oracle和SQL Server在事务处理上的区别
- oracle 自治事务
- 事务四大特征:原子性,一致性,隔离性和持久性(ACID)
- Oracle 事务操作
- 【Oracle】事务
- 事务的:原子性、一致性、分离性、持久性
- 在VB.NET使用OracleTransaction 处理事务
- ORACLE 之 事务(ONE)
- Oracle与Mysql数据的事务处理机制
- Oracle自治事务的介绍(Autonomous Transactions)
- Oracle 查看 使用 UNDO 段的事务 脚本
- Oracle笔记(七) 数据更新、事务处理、数据伪列
- (基础知识)Oracle事务锁(TX)和表级锁(TM)的理解