如何永久保存数据而无需在Oracle中使用提交?

问题描述:

如何在不执行COMMIT的情况下坚持DML语句的结果?例如,我怎样才能使这个更新永久?如何永久保存数据而无需在Oracle中使用提交?

 EMPNO ENAME  JOB    MGR HIREDATE   SAL  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
     7369 SMITH  CLERK   7902 17-DEC-80  800     20 

SQL> update emp set comm=200 where empno=7369; 


1 row updated. 

SQL> select * from emp; 
    EMPNO ENAME  JOB    MGR HIREDATE   SAL  COMM  DEPTNO 
---------- ---------- --------- ---------- --------- ---------- ---------- ---------- 
     7369 SMITH  CLERK   7902 17-DEC-80  800  200   20 
+1

这个问题没有意义。数据库基本上是事务性的。你必须“提交”或“回滚”任何改变。你为什么不想“改变”你的改变? –

+0

承诺*是*我们如何保存数据。你可能会问如何不淋湿淋浴。 – APC

在sqlplus,您可以关闭自动提交,然后你不需要手动提交每个事务:

SET AUTOCOMMIT ON 

您也可以使用任何DDL(数据定义语言)语句而不是COMMIT,
,因为所有DDL格式都会发出隐式提交。
例如,你可以使用COMMENT语句提交更改:

COMMENT ON TABLE emp IS 'some comment'; 

犯下是我们如何将更改保存到数据库中。不发布提交就无法将数据保存到数据库。发行commit(和rollback)是定义交易的内容。

某些数据库客户端将允许我们保存我们的更改,而无需明确执行commit;语句,方法是提供autocommit模式。例如,这是JDBC (find out more)和ODBC(find out more)的默认行为。

使用SQL * Plus(以及大多数其他数据库IDE),默认情况下用于手动控制事务。但是,我们可以通过将autocommit设置为ONIMMEDIATE或数字值例如每8个DML语句后SET AUTOCOMMIT 8将发出commitFind out more

autocommit模式运行通常是一个坏主意。仅仅因为有时我们会犯错误而能够回滚更改是有用的。但从业务角度来看,许多事务包含多个DML语句:在每个事务之后提交数据会导致数据损坏,这不仅仅是因为它影响了读取承诺隔离级别。 Find out more

简言之,开发者应该学会正确使用交易。这是构建可靠的数据库应用程序的关键。