PL/SQL事務(wù)

開始/結(jié)束事務(wù)
事務(wù)都有開始和結(jié)束。事務(wù)開始時有下列事件之一:

  • 連接到數(shù)據(jù)庫后執(zhí)行的第一個SQL語句。
  • 在事務(wù)完成之后發(fā)出每一個新的SQL語句完成。

事務(wù)結(jié)束時的下列事件之一發(fā)生:

  • COMMIT或發(fā)出ROLLBACK語句。
  • DDL語句,如CREATE TABLE語句,則發(fā)出;因為在這種情況下,COMMIT被自動執(zhí)行。
  • 一個DCL語句,比如一個GRANT語句發(fā)出; 因為在這種情況下,COMMIT被自動執(zhí)行。
  • 用戶從數(shù)據(jù)庫斷開。
  • 從SQL* PLUS用戶退出通過發(fā)出EXIT指令,COMMIT自動執(zhí)行。
  • SQL* Plus異常終止,自動執(zhí)行ROLLBACK。
  • 一個DML語句失敗; 在這種情況下自動執(zhí)行撤消DML語句ROLLBACK。

當(dāng)執(zhí)行一組 SQL 語句的時候,Oracle默認(rèn)幫我們開啟一個事務(wù)。我們也可以通過 SET TRANSACTION 語句手動開啟一個事務(wù)。
??Oracle默認(rèn)的隔離級別是read committed。


提交事務(wù)

COMMIT;

【示例】

INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (1, 'Ramesh', 32, 'Ahmedabad', 2000.00 );
INSERT INTO CUSTOMERS (ID,NAME,AGE,ADDRESS,SALARY)
VALUES (2, 'Khilan', 25, 'Delhi', 1500.00 );
COMMIT;

回滾事務(wù)
ROLLBACK命令的一般語法是:

ROLLBACK [TO SAVEPOINT <savepoint_name>];
  • 使用TO SAVEPOINT參數(shù)可以回滾到指定的回滾點
  • 直接ROLLBACK則整個事務(wù)都會回滾

保存點
??保存點是某種標(biāo)志,幫助分裂一個長事務(wù)分成更小的單位,并設(shè)置了一些檢查點。在一個長事務(wù)中設(shè)置保存點,可以根據(jù)需要回滾到一個檢查點。

保存點命令的一般語法是:

SAVEPOINT <savepoint_name>;

【示例】

INSERT INTO customers(id,name,age,address,salary)
VALUES (7, 'Rajnish', 27, 'HP', 9500.00 );
INSERT INTO customers(id,name,age,address,salary)
VALUES (8, 'Riddhi', 21, 'WB', 4500.00 );
SAVEPOINT sav1;

UPDATE customers SET salary = salary + 1000;
ROLLBACK TO sav1;

UPDATE customers SET salary = salary + 1000 WHERE id = 7;
UPDATE customers SET salary = salary + 1000 WHERE id = 8;
COMMIT;

自動事務(wù)控制
①自動開啟事務(wù)

SET TRANSACTION [事務(wù)類型|ISOLATION LEVEL 事務(wù)隔離級別] NAME 事務(wù)名稱;
  • 事務(wù)類型有:READ WRITE(讀寫事務(wù))、READ ONLY(只讀事務(wù))

【示例】

BEGIN  
-- 手動開啟事務(wù) tran  
SET TRANSACTION NAME 'tran';  
--SET TRANSACTION READ WRITE NAME 'tran'; -- 這條語句和上面的語句完全相同,表明它是一個讀寫事務(wù)  
INSERT INTO TEST VALUES ('Scott');  
-- 提交事務(wù)  
COMMIT; 
END;  
/  

②自動執(zhí)行事務(wù)提交
??要在每一個insert,update或detele命令執(zhí)行后自動執(zhí)行commit,可以設(shè)置autocommit環(huán)境變量:

#on為打開自動commit,off為關(guān)閉自動commit
set autocommit on;
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容