為了避免隱式提交或者回滾,盡量保證一條或者幾條DML操作完成后有顯示的提交或者回滾,防止后續(xù)執(zhí)行的DCL或者DDL自動提交前期的D
隱式提交的定義
又名自動提交,即無需顯示執(zhí)行commit語句,session中的操作被自動提交到數(shù)據(jù)庫的過程。
隱式提交的方式
1、正常執(zhí)行完ddl語句。包括create,,alter,drop,truncate,rename。
2、正常執(zhí)行完dcl語句。包括grant,revoke。
3、正常退出isql*plus,沒有明確發(fā)出commit或者rollback。
隱式提交的注意事項
1、執(zhí)行ddl語句時,前面的dml操作也會被提交到數(shù)據(jù)庫中
因為是在一個session里,那執(zhí)行ddl語句的時候前面的dml語句肯定也會“不可幸免”的被提交到庫中。
2、即使ddl語句執(zhí)行失敗,前面的dml操作也會被提交到數(shù)據(jù)庫中
這就有點兒讓人奇怪了,ddl都執(zhí)行失敗了,怎么還會提交呢?這就需要探究一下隱式提交的本質(zhì)了(下文有敘述)。
3、在前面1和2的基礎(chǔ)上總結(jié)
為了避免隱式提交或者回滾,盡量保證一條或者幾條DML操作完成后有顯示的提交或者回滾,防止后續(xù)執(zhí)行的DCL或者DDL自動提交前期的DML操作。
隱式提交的本質(zhì)
1、一條ddl語句執(zhí)行了兩次commit
commit;
ddl statement;
commit;
第一個commit將當前session中未提交的事務(wù)隱式提交,以保證ddl語句失敗時的回滾位置。
第二個commit將ddl
2、為什么需要隱式提交?
為了保證事務(wù)的一致性。我們在執(zhí)行ddl語句的時候,Oracle需要在它的系統(tǒng)表中進行元數(shù)據(jù)的記錄操作(即:除了建表還會進行不少insert操作),如果它不隱式提交就無法保證一致性;從內(nèi)部運行機制來看ddl語句和dml語句還是有很大區(qū)別的,dml會對每個語句的每條記錄都做日志記錄以便于回滾,而ddl往往沒必要搞這么復(fù)雜,從功能和易用性上看隱式提交都是最好的選擇。
相關(guān)閱讀:
Oracle PL/SQL之DDL導(dǎo)致的隱式提交
Oracle事務(wù) 行級鎖 保存點 回滾 提交
Oracle事務(wù)處理多條sql語句
Oracle事務(wù)的完整流程的分析
關(guān)于Oracle事務(wù)的小實例
Copyright ? 2019- 91gzw.com 版權(quán)所有 湘ICP備2023023988號-2
違法及侵權(quán)請聯(lián)系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com
本站由北京市萬商天勤律師事務(wù)所王興未律師提供法律服務(wù)