如何永久保存数据而无需在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
答
在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
设置为ON
,IMMEDIATE
或数字值例如每8个DML语句后SET AUTOCOMMIT 8
将发出commit
。 Find out more。
与autocommit
模式运行通常是一个坏主意。仅仅因为有时我们会犯错误而能够回滚更改是有用的。但从业务角度来看,许多事务包含多个DML语句:在每个事务之后提交数据会导致数据损坏,这不仅仅是因为它影响了读取承诺隔离级别。 Find out more。
简言之,开发者应该学会正确使用交易。这是构建可靠的数据库应用程序的关键。
这个问题没有意义。数据库基本上是事务性的。你必须“提交”或“回滚”任何改变。你为什么不想“改变”你的改变? –
承诺*是*我们如何保存数据。你可能会问如何不淋湿淋浴。 – APC