事务分为如下两种。
(1)显式方式
所谓“显式方式”,即是利用命令完成。语法如下:
【语法说明】
①第2~3行表示事务内的SQL语句,可以是单条,也可以是多条。
②第4行表示事务的提交或回滚。
Oracle中的事务不需要设置开始标志。通常有下列情况之一时,事务会开启:
①登录数据库后,第一次执行DML语句。
②当事务结束后,第一次执行DML语句。
(2)隐式方式
该类型的事务没有明确的开始和结束标志。它由数据库自动开启,当一个程序正常结束或使用DDL语言时会自动提交,而操作失败时也会自动回滚。如果设置AUTOCOMMIT为打开状态(默认关闭),则每次执行DML操作都会自动提交。命令语法如下:
事务在什么条件下结束需要引起注意,否则会有丢失数据的可能。当有下列情况之一时,事务会结束:
①使用COMMIT事务提交,ROLLBACK事务回滚。
②执行DDL语句,事务自动提交。例如,使用CREATE、DROP、GRANT、REVOKE等命令。
③正常退出SQL∗Plus时自动提交事务,非正常退出则ROLLBACK事务回滚。
事务可以保证数据的一致性。前面已经介绍过,事务没有提交时,当前会话所作的操作其他会话不会看到,下面用例13.1来演示。
【例13.1】 使用事务保证数据的一致性。
演示事务如何保证数据的一致性,这里分为下述4个步骤。
①登录SQL∗Plus,用户称该窗口为SQL∗Plus1,在hr模式下,执行如下两条语句:(www.daowen.com)
当以上操作提示成功后,查询DEPARTMENTS表的内容,验证数据是否修改成功,结果如图13.1所示。
图13.1 查询DML操作结果
从图13.1中可以看出DML操作数据成功。注意,此时还没有提交事务的操作。
②以同样的用户名登录新的SQL∗Plus,用户称该窗口为SQL∗Plus2。同样查询表DEPARTMENTS的数据,查看数据修改情况,结果如图13.2所示。
图13.2 新会话查询表DEPARTMENTS数据
此时可以发现,当会话1的事务没有提交时,会话2不能查看到会话1修改的数据。
③在SQL∗Plus1窗口提交事务。具体脚本如下:
当事务提交完成后,SQL∗Plus2窗口再次查询DEPARTMENTS表数据,结果如图13.3所示。
图13.3 提交事务后查询结果
此时可以发现事务一旦提交,SQL∗Plus就能查询到修改的数据。由此可以看出,事务可以保证数据的一致性。
免责声明:以上内容源自网络,版权归原作者所有,如有侵犯您的原创版权请告知,我们将尽快删除相关内容。