BeginTrans用于開(kāi)始一個(gè)事物;RollbackTrans用于回滾事務(wù);CommitTrans用于提交所有的事務(wù)處理結(jié)果,即確認(rèn)事務(wù)的處理
十多年專注成都網(wǎng)站制作,企業(yè)網(wǎng)站設(shè)計(jì),個(gè)人網(wǎng)站制作服務(wù),為大家分享網(wǎng)站制作知識(shí)、方案,網(wǎng)站設(shè)計(jì)流程、步驟,成功服務(wù)上千家企業(yè)。為您提供網(wǎng)站建設(shè),網(wǎng)站制作,網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù),專注于企業(yè)網(wǎng)站設(shè)計(jì),高端網(wǎng)頁(yè)制作,對(duì)成都雨棚定制等多個(gè)領(lǐng)域,擁有多年的網(wǎng)站制作經(jīng)驗(yàn)。
BeginTrans和CommitTrans 用于標(biāo)記事務(wù)的開(kāi)始和結(jié)束,在這兩個(gè)之間的語(yǔ)句,就是作為事務(wù)處理的語(yǔ)句
事務(wù)是為了實(shí)現(xiàn)數(shù)據(jù)的一致性和并發(fā)處理,你對(duì)數(shù)據(jù)進(jìn)行定義和修改時(shí)就會(huì)產(chǎn)生事務(wù)。
例如你執(zhí)行update語(yǔ)句,這時(shí)事務(wù)就開(kāi)始了,執(zhí)行commit會(huì)提交事務(wù),而rollback會(huì)回滾(撤銷)事務(wù)。如果你什么也不做,那么正常退出程序時(shí)會(huì)自動(dòng)提交,而程序異常中止則會(huì)回滾事務(wù)。
Oracle的事務(wù)開(kāi)始于一個(gè)DML語(yǔ)句。\x0d\x0a\x0d\x0a當(dāng)以下情況發(fā)生時(shí),事務(wù)結(jié)束:\x0d\x0a\x0d\x0a1、COMMIT/ROLLBACK\x0d\x0a\x0d\x0a2、執(zhí)行了DDL/DCL語(yǔ)句\x0d\x0a\x0d\x0a3、客戶端主動(dòng)斷開(kāi)數(shù)據(jù)庫(kù)的連接(DISCONNECT)\x0d\x0a\x0d\x0a4、數(shù)據(jù)庫(kù)關(guān)閉(宕機(jī))\x0d\x0a\x0d\x0a另外,一個(gè)DDL/DCL語(yǔ)句實(shí)際上就是一個(gè)事務(wù),其中隱含了COMMIT。\x0d\x0a\x0d\x0aOracle不需要特別的去指定事務(wù)的開(kāi)始和結(jié)束。一個(gè)事務(wù)的結(jié)束就是下一個(gè)事務(wù)的開(kāi)始。
當(dāng)然不是了,在Oracle中,只有DML才會(huì)開(kāi)啟一個(gè)事務(wù)。也就是說(shuō)Insert,Update,Delete這些都會(huì)開(kāi)啟一個(gè)事務(wù),并且該事務(wù)在commit/rollback/ddl命令時(shí)會(huì)自動(dòng)結(jié)束。
其他的,像查詢語(yǔ)句Select(不包含F(xiàn)or Update等語(yǔ)句)時(shí),是不會(huì)開(kāi)啟一個(gè)事務(wù)的。
補(bǔ)充:
首先有一點(diǎn)非常抱歉,上次的回答中誤將DML寫(xiě)成了DDL,可能這一點(diǎn)兒讓你誤解了。
“當(dāng)insert語(yǔ)句后會(huì)打開(kāi)事務(wù),然后再來(lái)一個(gè)insert語(yǔ)句又會(huì)是一個(gè)新事物是嗎”這種說(shuō)法是不正確的,第一個(gè)Insert沒(méi)有commit或者rollback的情況下,第二個(gè)Insert和第一個(gè)是屬于同一個(gè)事務(wù)的。因?yàn)镮nsert不屬于commit/rollback/ddl命令,而是屬于DML命令。
當(dāng)?shù)谝粋€(gè)Insert結(jié)束后,立即執(zhí)行一個(gè)新建表,刪除表等命令(DDL命令),則會(huì)結(jié)束當(dāng)前事務(wù)。