如何在不执行COMMIT的情况下保持DML语句的结果?例如,如何使此更新永久化?
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
答案 0 :(得分:1)
在SQLPlus中,您可以打开自动提交,然后您不需要手动提交每个事务:
path(path,'c:\my_folder\my_sub_folder')
您也可以使用任何DDL(数据定义语言)语句而不是COMMIT,因为所有DDL语句都会发出隐式提交。
例如,您可以使用COMMENT语句提交更改:
SET AUTOCOMMIT ON
答案 1 :(得分:1)
提交是我们如何保存对数据库的更改。如果不发出提交,则无法将数据保存到数据库。 commit
(和rollback
)的发布是定义交易的原因。
通过提供commit;
模式,某些数据库客户端将允许我们保存更改,而无需显式执行autocommit
语句。例如,这是JDBC (find out more)和ODBC(find out more)的默认行为。
使用SQL * Plus(以及大多数其他数据库IDE),默认情况下是手动控制事务。但是,我们可以通过将autocommit
设置为ON
,IMMEDIATE
或数值来终止控制权。 {8}会在每八个DML语句后发出SET AUTOCOMMIT 8
。 Find out more。
以commit
模式运行通常是一个坏主意。能够回滚更改是有用的,因为有时我们会犯错误。但是从业务角度来看,许多事务包含多个DML语句:在每个事务之后提交可能会引入数据损坏,尤其是因为它会损害Read Committed隔离级别。 Find out more。
简而言之,开发人员应该学会正确使用交易。它是构建可靠数据库应用程序的关键。