PL/SQL 专题
您的位置:database > PL/SQL专题 > PL/SQL事务
PL/SQL事务
作者:--    发布时间:2019-11-20

在本章中,我们将讨论和学习pl/sql中的事务。 数据库事务是由一个或多个相关sql语句组成的原子工作单元。它被称为原子操作,因为构成事务的sql语句带来的数据库修改可以共同提交,即永久化到数据库或从数据库回滚(撤销)。

成功执行的sql语句和提交的事务不一样。即使成功执行sql语句,除非提交包含语句的事务,否则可以回滚该语句,并且可以撤消语句所做的所有更改。

开始和结束事务

事务有开始和结束。当发生以下事件之一时,事务即开始 -

  • 连接到数据库后执行第一个sql语句。
  • 在事务完成后发出的每个新的sql语句。

事务在下列事件之一发生时结束 -

  • 发出了commitrollback语句。
  • 发出ddl语句,例如:create table语句; 因为在这种情况下,自动执行commit
  • 发布dcl语句,如:grant声明; 因为在这种情况下,自动执行commit
  • 用户从数据库断开连接。
  • 用户通过发出exit命令从sql * plus退出,commit自动执行。
  • sql * plus异常终止,会自动执行rollback
  • dml语句失败; 在这种情况下,会自动执行rollback来撤消该dml语句。

提交事务

通过发出sql命令commit将事务永久化。commit命令的一般语法是 -

commit;

例如,

insert into customers (id,name,age,address,salary) 
values (1, 'ramesh', 32, 'ahmedabad', 2000.00 ); 

insert into customers (id,name,age,address,salary) 
values (2, 'khilan', 25, 'delhi', 1500.00 ); 

insert into customers (id,name,age,address,salary) 
values (3, 'kaushik', 23, 'kota', 2000.00 ); 

insert into customers (id,name,age,address,salary) 
values (4, 'chaitali', 25, 'mumbai', 6500.00 ); 

insert into customers (id,name,age,address,salary) 
values (5, 'hardik', 27, 'bhopal', 8500.00 ); 

insert into customers (id,name,age,address,salary) 
values (6, 'komal', 22, 'mp', 4500.00 ); 

commit;

回滚事务

使用rollback命令可以撤销对不带commit的数据库所做的更改。

rollback命令的一般语法是 -

rollback [to savepoint < savepoint_name>];

当事务由于某种前所未有的情况而中止,如系统故障时,自提交以来整个事务被自动回滚。 如果不使用保存点(savepoint),那么只需使用以下语句来回滚所有更改。

rollback;

保存点 - savepoints

保存点(savepoints)是有助于通过设置一些检查点将长事务拆分成更小的单元的标记。通过在长事务中设置保存点,如果需要,可以回滚到检查点。这是通过发出savepoint命令完成的。

savepoint命令的一般语法是 -

savepoint < savepoint_name >;

例如,

insert into customers (id,name,age,address,salary) 
values (7, 'rajnish', 27, 'hp', 9500.00 ); 

insert into customers (id,name,age,address,salary) 
values (8, 'riddhi', 21, 'wb', 4500.00 ); 
savepoint sav1;

update customers 
set salary = salary + 1000; 
rollback to sav1;

update customers 
set salary = salary + 1000 
where id = 7; 
update customers 
set salary = salary + 1000 
where id = 8; 

commit;

rollback to sav1 - 此语句回滚直到保存点sav1的所有更改。

之后,所做新的改变将重新开始。

自动事务控制

要在执行insertupdatedelete命令时自动执行commit,可以将autocommit环境变量设置为 -

set autocommit on;

也可以使用以下命令关闭事务自动提交模式 -

set autocommit off;

网站声明:
本站部分内容来自网络,如您发现本站内容
侵害到您的利益,请联系本站管理员处理。
联系站长
373515719@qq.com
关于本站:
编程参考手册