Oracle:如何以事物的方式对数据库进行访问

2016-02-19 16:45 4 1 收藏

今天天气好晴朗处处好风光,好天气好开始,图老师又来和大家分享啦。下面给大家推荐Oracle:如何以事物的方式对数据库进行访问,希望大家看完后也有个好心情,快快行动吧!

【 tulaoshi.com - 编程语言 】

  一 事务的概念

  事务是由相关操作构成的一个完整的操作单元。两次连续成功的COMMIT或ROLLBACK之间的操作,称为一个事务。在一个事务内,数据的修改一起提交或撤销,如果发生故障或系统错误,整个事务也会自动撤销。

  oracle的数据语音分为数据定义语言(DDL)、数据控制语言(DCL)和数据操纵语言(DML)。其中的DML语言会生成事务,其他两种语言只要执行,事务就会结束。

  简单的说DML语言可以建立事务,DDL和DCL不能建立事务。

  DML语言包括几个命令,例如 select insert delete update等等,这些命令执行后,当前用户的显示信息是更改了,但是其他人访问你改的表的时候数据并没有更改,需要使用commit确认后才能更改。如果当前用户在没有执行commit前反悔操作了,那使用rollback命令可以回退到执行操纵语句之前,但是如果已经执行了commit语句是无法回退的。

  比如,我们去银行转账,操作可以分为下面两个环节:

  (1) 从第一个账户划出款项。

  (2) 将款项存入第二个账户。

  在这个过程中,两个环节是关联的。第一个账户划出款项必须保证正确的存入第二个账户,如果第二个环节没有完成,整个的过程都应该取消,否则就会发生丢失款项的问题。整个交易过程,可以看作是一个事物,成功则全部成功,失败则需要全部撤消,这样可以避免当操作的中间环节出现问题时,产生数据不一致的问题。

  一个事务是由一个可执行的SQL语句开始,一个可执行SQL语句产生对实例的调用。在事务开始时,被赋给一个可用回滚段,记录该事务的回滚项。一个事务以下列任何一个出现而结束。数据库事务是一个逻辑上的划分,有的时候并不是很明显,它可以是一个操作步骤,也可以是多个操作步骤。

  我们可以这样理解数据库事物:对数据库所做的一系列修改,在修改过程中,暂时不写入数据库,而是缓存起来,用户在自己的终端可以预览变化,直到全部修改完成,并经过检查确认无误后,一次性提交并写入数据库,在提交之前,必要的话所做的修改都可以取消。提交之后,就不能撤销,提交成功后其他用户才可以通过查询浏览数据的变化。

  以事务的方式对数据库进行访问,有如下的优点:

  * 把逻辑相关的操作分成了一个组。

  * 在数据永久改变前,可以预览数据变化。

  * 能够保证数据的读一致性。

  二 数据库事务的应用

  数据库事务处理可分为隐式和显式两种。显式事务操作通过命令实现,隐式事务由系统自动完成提交或撤销(回退)工作,无需用户的干预。

  隐式提交的情况包括:当用户正常退出SQL*Plus或执行CREATE、DROP、GRANT、REVOKE等命令时会发生事务的自动提交。

  还有一种情况,如果把系统的环境变量AUTOCOMMIT设置为ON(默认状态为OFF),则每当执行一条INSERT、DELETE或UPDATE命令对数据进行修改后,就会马上自动提交。设置命令格式如下:

  SET AUTOCOMMIT ON/OFF

  隐式回退的情况包括:当异常结束SQL*Plus或系统故障发生时,会发生事务的自动回退。

  显式事务处理的数据库事务操作语句有3条,分别是COMMIT,ROLLBACK,SAVEPOINT语句。

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  COMMIT是数据库事物提交,将变化写入数据库。此操作把多个步骤对数据库的修改,一次性地永久写入数据库,代表数据库事务的成功执行。ROLLBACK是数据库事务回退,撤销对数据库的修改。操作在发生问题时,把对数据库已经作出的修改撤消,回退到修改前的状态。在操作过程中,一旦发生问题,如果还没有提交操作,则随时可以使用ROLLBACK来撤消前面的操作。SAVEPOINT则用于在事务中间建立一些保存点,ROLLBACK可以使操作回退到这些点撤上边,而不必撤销全部的操作。一旦COMMIT完成,就不能用ROLLBACK来取消已经提交的操作。一旦ROLLBACK完成,被撤消的操作要重做,必须重新执行相关操作语句。

  如何开始一个新的事务呢?一般情况下,开始一个会话(即连接数据库),执行第一条SQL语句将开始一个新的事务,或执行COMMIT提交或ROLLBACK撤销事务,也标志新的事务的开始。另外,执行DDL(如CREATE)或DCL命令也将自动提交前一个事务而开始一个新的事务。

  数据在修改的时候会对记录进行锁定,其他会话不能对锁定的记录进行修改或加锁,只有当前会话提交或撤销后,记录的锁定才会释放。

  例如修改雇员SCOTT的工资,工资在原有基础上增加1000:

  UPDATE emp SET sal=sal+1000 WHERE empno=7788;

  执行结果:

  已更新 1 行。

  显示修改后SCOTT的工资:

  SELECT ename,sal FROM emp WHERE empno=7788;

  执行结果:

  ENAME SAL

  SCOTT 4000

(本文来源于图老师网站,更多请访问http://www.tulaoshi.com/bianchengyuyan/)

  经查看修改结果正确,提交所做的修改:

  COMMIT;

  执行结果:

  提交完成。

  在执行COMMIT后,工资的修改被永久写入数据库。本训练的第1步,先使用COMMIT命令提交原来的操作,同时标志一个新的事务的开始。注意:在事务执行过程中,随时可以预览数据的变化。对于比较大的事务,可以使用SAVEPOINT命令在事务中间划分一些断点,用来作为回退点。

来源:http://www.tulaoshi.com/n/20160219/1613018.html

延伸阅读
Oracle数据库数据对象中最基本的是表和视图,其他还有约束、序列、函数、存储过程、包、触发器等。对数据库的操作可以基本归结为对数据对象的操作,理解和掌握Oracle数据库对象是学习Oracle的捷径。 表和视图 Oracle中表是数据存储的基本结构。ORACLE8引入了分区表和对象表,ORACLE...
笔者认为,在创建索引时要做到三个适当,即在适当的表上、适当的列上创建适当数量的索引。虽然这可以通过一句话来概括优化的索引的基本准则,但是要做到这一点的话,需要数据库管理员做出很大的努力。具体的来说,要做到这个三个适当有如下几个要求。 一、 根据表的大小来创建索引。 虽然给表创建索引,可以提高查询的效率。但是数...
标签: PHP
  PHP中对数据库操作的封装 在动态网面设计中很多都要涉及到对数据库的操作,但是有时跟据需要而改用其它后台数据库,就需要大量修改程序。这是一件枯燥、费时而且容易出错的功作。其实我们可以用PHP中的类来实现对数据库操作的封装,从而使写出的程序在很小的改动下就可以完成后台数据库的更改。 现在我们把其封装在dbfz.inc中,其...
任何数据库在长期使用过程中,都会存在一定的安全隐患。对于数据库管理员来说不能仅寄希望于计算机操作系统的安全运行,而是要建立一整套的数据库备份与恢复机制。当数据库发生故障后,希望能重新建立一个完整的数据库,该处理称为数据库恢复。恢复子系统是数据库管理系统的一个重要组成部分。恢复处理随所发生的故障类型所影响的结构而变...
这是我前段时间学数据库时做的一个小程序,采用DAO访问ACCESS数据库,程序的主界面如下,控制相对来说很是简单,实现了数据库的基本操作。如图一所示: 几点说明: 在程序中使用了CButtonStyle这个免费类库,它可以实现带位图的按位,这里是以加载图标的方式操作的,在InitButtonSytle()中,为了使代码更短小,用循环实现了图...

经验教程

616

收藏

93
微博分享 QQ分享 QQ空间 手机页面 收藏网站 回到头部