2015-09-05 69 views
-4

如何在不執行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

回答

1

在sqlplus,您可以關閉自動提交,然後你不需要手動提交每個事務:

SET AUTOCOMMIT ON 

您也可以使用任何DDL(數據定義語言)語句而不是COMMIT,
,因爲所有DDL格式都會發出隱式提交。
例如,你可以使用COMMENT語句提交更改:

COMMENT ON TABLE emp IS 'some comment'; 
1

犯下是我們如何將更改保存到數據庫中。不發佈提交就無法將數據保存到數據庫。發行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

簡言之,開發者應該學會正確使用交易。這是構建可靠的數據庫應用程序的關鍵。