Oracle事务之rollback回滚和savepoint保存点以及commit提交

一、savepoint、rollback

保存点可以回退到事务的一部分,我们在操作数据库的过程中可以对事务分隔为几个部分,在操作失误的时候就可以回滚到某个点即可。

a、我们现在新建一张表empt:

create table empt(
       "id" number,
       "text" varchar2(20)
);

b、插入第一条数据;

insert into empt values(1,'第一条数据');

c、 设置保存点sk;

savepoint sk;

d、查询数据;

 

select * from empt;

 结果如下图:

Oracle事务之rollback回滚和savepoint保存点以及commit提交_第1张图片

 e、插入第二条数据并查询;

insert into empt values(2,'第二条数据');
select * from empt;

Oracle事务之rollback回滚和savepoint保存点以及commit提交_第2张图片 

f、回滚并查询;

rollback to sk;
select * from empt;

 Oracle事务之rollback回滚和savepoint保存点以及commit提交_第3张图片

 

当一个事务回滚到一个savepoint,发生下列事件: 
1. Oracle仅回滚savepoint之后的语句。 
2. Oracle保留这一savepoint,但所有建立于此后的savepoints丢失。 
3. Oracle释放在该savepoint后获得的所有表、行锁,但保留之前获得的所有锁。 
4. 事务保持活动并可继续。 

二、commit(提交)的作用

刚接触数据库操作,今天在oracle中使用sql语句执行了delete和update命令,在本地数据库中已执行成功,兴致冲冲的向老大汇报任务时,但是他那边查看并没有删除成功或更新数据库,很是尴尬,为什么会出现这种不一致的情况呢?

    原来是因为我执行命令后没有commit提交,那么更新的内容只是被保存到内存中,而不是提交到数据库中,将不会被其他Session(对话)看到,其他对话看到的是更新前的数据。当用户退出对话时,Oracle才会自动commit。

 

这个命令是将数据写到数据库中。如果不执行COMMIT这个命令,那么在你这个session之外的其他session查询的数据是你修改数据之前的数据。而COMMIT之后人家查询的是你修改的数据。你可以打开两个sqlplus比较做一下测试。一目了然。 
commit的提交针对的是:DML
Data Manipulation Language(DML) 需要提交,这部分是对数据管理操作,比如Insert(插入)、Update(修改)、Delete(删除),
Data Definition Language(DDL) 不需要提交,这部分是对数据结构定义,比如 Create(创建)、Alter(修改)、Drop(删除)
 
 

 

你可能感兴趣的:(Oracle)