事务是通过savepoint来实现的吗? oracle里讲的事务,实现方式就是通过设置保存点来实现的吗?还是还有其他标志性的标记?比如打包性的:(事务开始)updatedeleteselectdelete(事务结束)一旦回滚就全部取消前面的操作。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 /*oracle中事物是一组sql语句的集合,他们组成一个逻辑工作单元;事物具有以下特性(ACID特性):1,原子性(automicity):事物中的动作要么都发生,要么都不发生2,一致性(consistency):事物将数据库从一种一致状态转换为另一种一致状态3,隔离性(isolation):一个事物的影响在该事物提交之前对其他事物都不可见4,持久性(durability):事物一旦提交,其结果将是永久性的commit,savepoint,rollback等只是事物控制语句,他们将在事物的操作过程中使事物保持完整性。commit用来显示提交事物,提交的事物不可回滚;savepoint:设置保存点;rollback to savepoint:用来回滚事物,即撤销当前未提交的事物所作的所有修改;set transaction:用于设置不同的事物隔离级别;这里要注意的是commit,它是用来显示提交事物的,但是我们的一些操作会隐式的提交事物;这些操作就是我们所说的ddl语句,而一般的dml语句是不能导致事物的提交的;*/SQL> create table t(id number(10));Table createdSQL> --craete 是一个ddl语句,它会隐式的提交事物,我们这里的创建表就是一个事物SQL> insert into t values(1);1 row insertedSQL> insert into t values(154);1 row insertedSQL> savepoint a;Savepoint createdSQL> --这里设置了一个保存点,用于下面的回滚SQL> insert into t values(10101);1 row insertedSQL> insert into t values(10101000);1 row insertedSQL> select * from t; ID----------- 1 154 10101 10101000SQL> rollback to a;--我们回滚到保存点a,那么保存点a之后添加的数据就没了Rollback completeSQL> select * from t; ID----------- 1 154SQL> insert into t values(10101000);1 row insertedSQL> insert into t values(111111111);1 row insertedSQL> select * from t; ID----------- 1 154 10101000 111111111SQL> --如果此时我们执行一条ddl语句,那么将会提交之前的所有操作SQL> create table a 2 as select * from t;Table createdSQL> --此时我们回滚一下操作,看看有什么效果SQL> rollback ;--这里不指定保存点,而是全部回滚Rollback completeSQL> select * from t; ID----------- 1 154 10101000 111111111SQL> --我们看到,我们的rollback就像没有起作用一样SQL> --这就证明了ddl操作隐式的提交了之前的所有事物的操作,即使我们没有显示的commit之前的事物SQL> rollback to a;rollback to aORA-01086: savepoint 'A' never establishedSQL> --而且提示找不到刚刚才我们建立的保存点aSQL> SQL> drop table t;Table droppedSQL> drop table a;Table droppedSQL> commit;--这才是现实的提交Commit complete 求助两个sql的区别 ORACLE作业问题 execute immediate update 缺失 SET 关键字 的问题 实际返回的行数超出请求的行数?? 关于找出某一列里最大的前几个的问题! 各位给点意见! 关于and / or 的复杂sql语句,向各位大虾请教 不用ORACLE的sequence怎么生成连续序列 (多用户操作,要防止方式并发生成同一序列) 新手!我开始学ORACLE……下了几个东西不知道什么用途啊! 关于oracle的advanced Queue 急求一条查询语句,在线急等! 请教一个数据库设计问题
/*
oracle中事物是一组sql语句的集合,他们组成一个逻辑工作单元;
事物具有以下特性(ACID特性):
1,原子性(automicity):事物中的动作要么都发生,要么都不发生
2,一致性(consistency):事物将数据库从一种一致状态转换为另一种一致状态
3,隔离性(isolation):一个事物的影响在该事物提交之前对其他事物都不可见
4,持久性(durability):事物一旦提交,其结果将是永久性的
commit,savepoint,rollback等只是事物控制语句,他们将在事物的操作过程中
使事物保持完整性。
commit用来显示提交事物,提交的事物不可回滚;
savepoint:设置保存点;
rollback to savepoint:用来回滚事物,即撤销当前未提交的事物所作的所有修改;
set transaction:用于设置不同的事物隔离级别;
这里要注意的是commit,它是用来显示提交事物的,
但是我们的一些操作会隐式的提交事物;
这些操作就是我们所说的ddl语句,而一般的dml语句是不能导致事物的提交的;
*/
SQL> create table t(id number(10));
Table createdSQL> --craete 是一个ddl语句,它会隐式的提交事物,我们这里的创建表就是一个事物
SQL> insert into t values(1);
1 row insertedSQL> insert into t values(154);
1 row insertedSQL> savepoint a;
Savepoint createdSQL> --这里设置了一个保存点,用于下面的回滚
SQL> insert into t values(10101);
1 row inserted
SQL> insert into t values(10101000);
1 row insertedSQL> select * from t;
ID
-----------
1
154
10101
10101000SQL> rollback to a;--我们回滚到保存点a,那么保存点a之后添加的数据就没了
Rollback completeSQL> select * from t;
ID
-----------
1
154SQL> insert into t values(10101000);
1 row inserted
SQL> insert into t values(111111111);
1 row insertedSQL> select * from t;
ID
-----------
1
154
10101000
111111111SQL> --如果此时我们执行一条ddl语句,那么将会提交之前的所有操作
SQL> create table a
2 as select * from t;Table createdSQL> --此时我们回滚一下操作,看看有什么效果
SQL> rollback ;--这里不指定保存点,而是全部回滚Rollback completeSQL> select * from t; ID
-----------
1
154
10101000
111111111SQL> --我们看到,我们的rollback就像没有起作用一样
SQL> --这就证明了ddl操作隐式的提交了之前的所有事物的操作,即使我们没有显示的commit之前的事物
SQL> rollback to a;rollback to aORA-01086: savepoint 'A' never establishedSQL> --而且提示找不到刚刚才我们建立的保存点a
SQL>
SQL> drop table t;
Table droppedSQL> drop table a;
Table droppedSQL> commit;--这才是现实的提交
Commit complete