PL/SQL事务

开始/结束事务
事务都有开始和结束。事务开始时有下列事件之一:

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

事务结束时的下列事件之一发生:

  • COMMIT或发出ROLLBACK语句。
  • DDL语句,如CREATE TABLE语句,则发出;因为在这种情况下,COMMIT被自动执行。
  • 一个DCL语句,比如一个GRANT语句发出; 因为在这种情况下,COMMIT被自动执行。
  • 用户从数据库断开。
  • 从SQL* PLUS用户退出通过发出EXIT指令,COMMIT自动执行。
  • SQL* Plus异常终止,自动执行ROLLBACK。
  • 一个DML语句失败; 在这种情况下自动执行撤消DML语句ROLLBACK。

当执行一组 SQL 语句的时候,Oracle默认帮我们开启一个事务。我们也可以通过 SET TRANSACTION 语句手动开启一个事务。
  Oracle默认的隔离级别是read committed。


提交事务

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 );
COMMIT;

回滚事务
ROLLBACK命令的一般语法是:

ROLLBACK [TO SAVEPOINT <savepoint_name>];
  • 使用TO SAVEPOINT参数可以回滚到指定的回滚点
  • 直接ROLLBACK则整个事务都会回滚

保存点
  保存点是某种标志,帮助分裂一个长事务分成更小的单位,并设置了一些检查点。在一个长事务中设置保存点,可以根据需要回滚到一个检查点。

保存点命令的一般语法是:

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;

自动事务控制
①自动开启事务

SET TRANSACTION [事务类型|ISOLATION LEVEL 事务隔离级别] NAME 事务名称;
  • 事务类型有:READ WRITE(读写事务)、READ ONLY(只读事务)

【示例】

BEGIN  
-- 手动开启事务 tran  
SET TRANSACTION NAME 'tran';  
--SET TRANSACTION READ WRITE NAME 'tran'; -- 这条语句和上面的语句完全相同,表明它是一个读写事务  
INSERT INTO TEST VALUES ('Scott');  
-- 提交事务  
COMMIT; 
END;  
/  

②自动执行事务提交
  要在每一个insert,update或detele命令执行后自动执行commit,可以设置autocommit环境变量:

#on为打开自动commit,off为关闭自动commit
set autocommit on;
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容