课程表

Oracle 基础教程

Oracle 进阶教程

Oracle PL/SQL

Oracle OEM

Oracle 备份和恢复

Oracle RAC

工具箱
速查手册

Oracle 事务

当前位置:免费教程 » 数据库/运维 » Oracle

oracle事务主要用于保持oracle数据库的数据一致性,oracle事务可以看成一个SQL块的整体,只要某一个SQL语句错误,那么事务中的SQL被看做一个整体,一起回滚,要么就是一起成功全部提交。

我们经常举例银行转账的例子来解析事务,银行转账可以分为三步数据库操作:

1、A账户给B账户转钱500,A账户上金额减少500。

2、B账户上金额增加500。

3、向转账记录表中插入一条A向B转账500块的记录。

整个交易的过程可以看做一个事务,其中任何一步出差错,整个事务都将回滚,不然交易过程会出现数据不一致的情况,所以整个交易过程必须用上事务,保证数据的一致性,要么一起成功持久化到数据库,要么一起失败回滚。

事务在还未提交之前,当前同一个事务内(即同一个session内)的SQL查询可以查看到变化的数据,但是其他用户查询不到当前未提交的数据。只能等提交后,持久化到数据库,才能查到变化的数据。因此,事务一经提交就不能回滚了。oracle事务的基本语法有:

1、set transaction :设置事务属性。

2、commit:提交事务。

3、rollback:回滚事务。

4、savepoint:设置保存点。

5、rollback to savepoint :回滚到保存点。

事务的类型

oracle事务的大概可以分为两种事务,一种是显式的事务,另外一种是隐式事务。

1、显式事务:顾名思义就是开发者主动控制事务的提交和回滚,可以利用命令来控制事务的提交,如:常见的PL/SQL语句块就是这种类型的事务。必须利用commit提交。

2、隐式事务:指的是oracle数据库自己控制事务的提交和回滚。比如oracle的DDL语句(create、drop、alter等)、DCL语句(grant、revoke)等都是一经执行直接持久化到数据库,不需要开发者自己手动提交。或者是DML语句在oracle数据库设置了自动提交:set autocommit on,也可以不需要主动提交就可以直接持久化到数据库。



案例1、oracle事务例子演示,代码如下:

  1. declare
  2. address varchar2(100);
  3. begin
  4.   --取出学生SC201801001的地址
  5.   select t.stuaddress
  6.     into address from stuinfo t
  7.    where t.stuid = 'SC201801001';
  8.   dbms_output.put_line(address);
  9.   --1.修改学生SC201801001的地址为001
  10.   update stuinfo t
  11.      set t.stuaddress = '福建省厦门市001号'
  12.    where t.stuid = 'SC201801001';
  13.   --再次取出
  14.   select t.stuaddress
  15.     into address from stuinfo t
  16.    where t.stuid = 'SC201801001';
  17.   dbms_output.put_line(address);
  18.   --设置保存点1
  19.   savepoint f1;
  20.   --2.修改学生SC201801001的地址为002
  21.   update stuinfo t
  22.      set t.stuaddress = '福建省厦门市002号'
  23.    where t.stuid = 'SC201801001';
  24.   --再次取出
  25.   select t.stuaddress
  26.     into address from stuinfo t
  27.    where t.stuid = 'SC201801001';
  28.   dbms_output.put_line(address);
  29.   --回滚到保存点
  30.   rollback to f1;
  31.   commit;
  32. end;

代码解析:

1、修改学生“SC201801001”地址为"001号",并保存一个savepoint(保存点)f1。

2、继续修改学生的地址为“002号”,打印出学生的地址,这个时候回滚到保存点f1,再提交,这个时候学生的地址应该是“001号”,结果如下:

1.jpg

虽然事务可以使用保存点进行回滚,但是在实际开发当中还是不推荐使用,尽量控制好事务的逻辑,少用保存点,可以把长事务缩减为短事务。

总结

oracle事务是oracle数据一致性的基础,oracle事务具有原子性、一致性、分离性、持久性的特点。分别指的是:

1、原子性:oracle事务是oracle数据库逻辑控制当中的逻辑单位,它对数据的操作要么是全部执行成功、要么全部不成功。

2、一致性:指的是事务执行的前后的数据库的数据必须保持一致状态。只有事务完成后,事务中修改的数据,才能被其他用户读。

3、隔离性:事务之间具有并发性,之间不互相干扰。

4、持久性:指的是事务中的数据一经提交,就持久化到数据库,即使后面的操作错误被打断,也不会回滚到之前的状态。


转载本站内容时,请务必注明来自W3xue,违者必究。
 友情链接:直通硅谷  点职佳  北美留学生论坛

本站QQ群:前端 618073944 | Java 606181507 | Python 626812652 | C/C++ 612253063 | 微信 634508462 | 苹果 692586424 | C#/.net 182808419 | PHP 305140648 | 运维 608723728

W3xue 的所有内容仅供测试,对任何法律问题及风险不承担任何责任。通过使用本站内容随之而来的风险与本站无关。
关于我们  |  意见建议  |  捐助我们  |  报错有奖  |  广告合作、友情链接(目前9元/月)请联系QQ:27243702 沸活量
皖ICP备17017327号-2 皖公网安备34020702000426号